Beiträge von nono124

    Hi
    Ich sagte schon das es nicht geht einen string als methoden Aufruf zu benutzen. Wie den auch da mußte es ja zu Laufzeit neu compiliert werden. Soetwas get in Java oder in einer Compiler Sprache nicht.


    Bevor du den Fokus setzt könntest du deine pref einlesen, und prüfen ob diese true ist und dann halt den Fokus auf die Instanz die du mit findViewById bekommenhast setzen.


    Auch wenn du jetzt auf die Idee kommst die Instanz Speichen zu wollen wird das nicht gehen die ist beim nechsten start der app anders.


    Du kannst auch die Id "int" oder "R. Id. deineid"
    In der pref Speichen und die beim findviewbyid benzuten. Das in der onCreate beim Start aufrufen.
    Das ganze kommt etwas auf deinen Progammaufbau an. I



    Programm Code kann nicht zur Laufzeit verändert werden auf jeden Fall nicht in Java.
    Was ja bekanntlich compiliert wird.

    Um etwas zu starten auch wenn die app im Hindergrund ist wäre der alarmmanager geeignet. Der dann einen pending intent schickt.


    Das ikon ändern geht nicht so ohne weiteres. Ich denke du meinst ein widget was sich ändert. Dazu müsstet du ein Homescreen Widget schreiben. Was du ach Machen kannst ist eine Benachrichtigung senden.
    Dazu würde ich den alarmmanager benutzen und einen servis der die Benachrichtigung schickt.
    Ansonsten sind Hindergrund Dienste seit android 7 und 8 schwierig geworden.

    Hallo


    Wenn du von einer Activity zu einer anderen willst sagte ich das dies mittels einem „Intent“ geht.


    Ich glaube du hast noch nicht verstanden was eine Activity ist.



    Eine Activity ist nicht nur eine Klasse sondern es ist quasi die Umgebung in der deine Bildschirm Seite läuft.
    Die kannst du nicht selber mittels einer Instanz und Kostrucktor aufrufen.


    Das siehst du doch schon daran das du für eine von Activity oder AppCompatActivity abgeleitete Klasse keine Konstruktor haben du dort auch keinen anlegen kannst .



    Die Kasse ist so zusagen dein Programm Anfang. Und wird vom System aufgerufen gestartet.
    (auch der Start deiner App erfolgt vom system selber mit einem Intent)



    Mit einen Intent teilst du dem System mit das du die aktuelle Activity verlassen möchtest und ein neue starten willst. Intest sind System Nachrichten. Es gibt es verschiedene arten von Intens.
    Du brauchst einen Expliziten Intent.


    Beim Verlassen der Activity wird aber auch der Speicher vor der Klasse wieder freigegeben, und deine Variablen sind somit lehr wenn du wieder zurück gehst . Denn es wird auch wieder die onCreate Methode aufgerufen. Du kannst dir eine Activity wie ein kleines eigenes Programm in deiner App vorstellen was immer wieder neu gestattet wird wenn du von einer Avtivity zu anderen gehst.
    Schaue dir auch mal den LifeCycle einer Activity an . Dann verstehst du es vielleicht besser.



    Starte deine Activity so.

    Code
    Intent intent = new Intent(this , MainActivity.class);
    startActivity(intent);


    So nun einige Fragen zu deinem Code.



    Wie bist du überhaupt von deiner MainActivity in die „gameOver“ Klasse gekommen? Da du Intent nicht kennst denke ich das du es nicht so wie ich beschrieben habe gemacht hast.
    Nur als Tipp Klassennamen schreibt man Groß.



    In welcher Klasse ist eigentlich deine gameSchleife?



    Wieso macht du das "setContentView(gameView); " und was ist gameView ?


    Hier gehört eigentlich ein Layout rein und keine Instanz einer Klasse.




    Also eigentlich müsste das so aussehen.



    In jeder GameActivity hast du ein Layout in xml. In dem Layout erstellst du eine View von deiner eigenen View „GameView“ mit den üblichen Eigenschaften Höhe, Weite, ID ,….



    <dein_Package.GameView
    android:id="@+id/ganeView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>



    Dieses Layout wird wie üblich in die Activity mit setContentView geladen.


    So nun brauchst du die Instanz auf deine eigene View die hoslst du die wie üblich mit findViewById genau wie ZB. einer TextView.


    GameView mGameView = (GameView) findViewById(R.id.deineID);


    So nun hast eine Instanz und kannst auf deine Klasse zugreifen.


    Willst du nun in der Game Klasse etwas ändern oder abfragen macht man das über gett und Setter Methoden in der klasse um von der Activity mittels der eben ermittelten Instanz zuzugreifen. Oder wenn die Variablen Public sind auch direkt.


    Auch in der Klasse (Activity) ist deine Zeitschleife und der Rück Sprung zur Mainactivity .
    Den Start der GameActivit auch natürlich mit Intent . Willst du dem Intent noch etwas mitgeben geht das auch entweder über putExtra oder das Bundle. Das Extra musst du natürlich in der anderen Activity wieder aus dem Intent selber raushohlen. Denn wie ich schon am anfangs sagte sind Activitys abgeschlossenere Einheiten und wenn du eine verlassen hast kannst du nicht mehr auf Variablen der alten zugreifen. Deshalb die Übergabe mit putExtra. Schau dir das in der Doku an.

    Was soll ich da erklären. Das ist eigentliche Java und ist nicht undedingt android spezifisch.
    Stelle eine korrekte Frage dann kann ich es versuchen.
    Einen Wechsel der activity und somit auch Bildschirm Seite wird in Android mit einen Intent gemacht. Dem du auch Parameter mit übergeben kannst. Schaue die dazu mal Intent an. Anders als in Java ist das wenn du eine activity verlässt sie beendet wird. Und auch deine Variablen der activity sind Inder anderer nicht vorhanden und werd n gelöscht.

    Ok Danke.
    Ich wolte nur sicher gehen ob du es mit thread s gelöst hast. Und nicht den Main thread an hälst.
    Aber funktionrt denn das mit dem setContentView im thread?


    Auch wenn das so geht und du nach Game over wohl dein layout der activity wieder lädst. Solltest du den timer auch beenden.
    Besser wäre aber deine view in einer eigenen activity laufen zu lassen. Und nach gameover wider zu Main activity zu gehen. Beim nechsten Spiel Durchlauf startest du wider die Game activity.

    Am einfachsten für dich wird es wohl sein. Da du sowieso schon eine Zeitschleife hast und ständig die Klasse aufruft das du zwischendurch prüft ob deine gameover variable Gesetz ist. Und wenn ja beendest du deine Dauer Schleife.
    Das ganze ist sowie so kein schöner workaround. Da kommt es auf diesen Schönheits Fehler such nicht mehr an.


    An sonsten würde ich das mit Interface, callback, und listner machen.

    Hallo habe mir deine Klasse noch mal angesehen ich denke du willst gleich in dieser Klasse deine Spielsteuerung machen. Finde ich zwar nicht so toll. Aber wenn du das willst musst du in deine Event Methode am ende mittels invalidate(); deine onDraw wieder aufrufen.


    Ps. solte meine hilfe dir nicht reichen erläre aber erstmal etwas genauer. Von wo nach wo willst du was Aufrufen wie hast du deine View eingebuten so ist Hilfe sehr Schwer.

    Hallo gehe ich richtig in der Anahme das du deine eigene „View“ neu zeichnen lassen willst, also die onDraw Methode aufrufen willst?


    Die solltest du nicht selber aufrufen dafür gibt es die „invalidate()“ Methode der View.
    Damit wird ein neu zeichnen der View vom System veranlasst.
    Um die onDraw Methode deiner Klasse aufzurufen hast du zb. gar nicht das „canvas“ zum übergeben somit wird das nie funktionieren.
    Also benutze „deineView.invalidate();“ zum neu Zeichnen.

    Hi
    um Bildschirm Ausgaben zu machen musst du wieder auf den UI Thread wechseln.
    Das kannst du mit einen „Handler“ machen oder mit der Methode „runOnUiThread“ und einem „runnable“ .
    Wo du das machst ist dir überlassen. Entweder du führst die gesamte Klasse „Tage_Berechnen „ im Main Thread aus, oder nur den Teil der wirklich im Main Thread laufen muss die Ausgabe auf dem Bildschirm .
    Ich bevorzuge die zweite Variante.
    Ich würde sagen das du dir mal das Thema Multi Threading in Java anschauen solltest.


    Hier der Code für die zeite Variante.


    Und hier wie du ganze Klasse in Ui startest.


    Hallo also die übergabe deiner Activity ist falsch.


    Erstelle in der Main am besten einGlobale Variable Activiy und in der onCreate übergibst du ihr „this“ was ja in dem Moment deine Activity ist , und diese Variable gibst du weiter.


    Das wird zwar so gehen.


    Aber der eigentliche sinn der TimerTast Klasse ist ja die „Run“ Methode die in einem separaten Task(Thread) abläuft. Da machst du ja nichts .


    Wenn doch musst du aber auch aufpassen das du dort keinen Zugriff auf UI Elemente machen darfst denn in einen Thread keine Ausgabe auf dem Bildschirm also Zugriff auf dem Ui Thread.
    Da du alles im automatischen erstellten Konstruktor ,deiner Inneren Klasse, machst ist das ok den der läuft im UI Thread.


    Auch nur weil du in einer Inneren Klasse bist, geht es ein Statement so wie dieses im Klassenrumpf auszuführen.
    Tage_Berechnung instance_2 = new Tage_Berechnung(activity, 2);
    Würde in einer Klasse als eigene Datei nicht gehen .Da brauchst du dann den Konstruktor dazu.



    Solltest du diese Zeile aber in die Run Methode schreiben wirst du ein Problem haben denn da bist du in einen andrehen Thread. Nun wir auch deine Klasse „Tage_Berechnung“ im Thread ausgeführt und die greift auf den Ui Thread zu.





    das LiveBild? Es ist ein andere Fragment vorher. Das klappt das auch wunderbar mit CameraView.setForeground().

    dann zeige uns doch mal wie das bei dem Live Bild aus sieht. Ich meine Layout und in Java.
    denn wenn dort das Fordergund geht muss es auch in deiner Klasse gehen.


    Oder ist das eine Lib die ihre eigenene Gradle fiele hat?


    Ps. mal noch eine Frage wie sieht den dein Fordergound Drawable aus "R.drawable.rounded_shape" .
    eigentlich müsste das ein Drawable sein und kein Xml Shape sein . Das müsste in den Ecken eine Farbe Haben und in der Mitte Transparenz, wenn du das als Maske über das Bild Legen willst. Um so Runde Ecken zu bekommen.



    setForeground


    added in API level 1 public void setForeground (Drawable foreground) Supply a Drawable that is to be rendered on top of all of the content in the view.

    Zitat

    Hallo
    Frage zum Code.
    Was ist BitmapPhoto? Kenne ich nicht muss eine eigene Klasse sein. Wird mit " .bitmap" auch wirklich ein Bitmap daraus?
    Wie sieht es aus wenn du das forderground mal weg läßt wird da ein Bild angezeigt?


    In welches Layout wird denn das Bild von der Cam eingeblendet?


    Ansonsten wird dir wohl nichts anderes übrig bleiben die android Version abzufragen und entweder mit Vordergrund oder ohne zu arbeiten.
    Bei API 19 wirst du wohl selber die runden ecken vielleicht durch Transparenz auf dem Bitmat erzeugen müssen bevor du es anzeigst.