1. Hast Du Lust, bei uns mitzuarbeiten und das AH-Team zu verstärken? Alle Details zu dieser aktuellen Herausforderung findest Du hier.
  1. lola48, 14.04.2012 #1
    lola48

    lola48 Threadstarter Neuer Benutzer

    Hallo ich bin gerade bei der Gameentwicklung in Android.

    Ich brauche in meiner App eine Methode, die genau das macht, was paint() bzw. repaint() in Java in AWT macht. Ich hab schon bisschen gegoogelt und folgendes Gefunden:

    protected void onDraw(Canvas c) {
    invalidate();
    }

    Das Problem ist, das muss ich ja, mit Canvas aufrufen. Ich suche aber wirklich nur eine Methode, die durchaus neu aufgerufen wird, ohne stack overflow, genau wie paint!

    Wenns das nicht gibt, könnte mir jemand erklähren was genau ich bei der obigen Methode mit onDraw für Canvas übergeben muss? Hab einiges über Canvas gelesen, aber nich 100% durchgeblickt

    (falls es wichtig ist, ich nutze beim programmieren CAndroid Engine, aber ich glaube eine solche Methode gibs sicherlich in Android standart)
     
  2. strider, 15.04.2012 #2
    strider

    strider Erfahrener Benutzer

    Die onDraw Methode rufst du nicht direkt auf sie wird vom System aufgerufen wenn es der Meinung ist die Zeichenfläche müßte neu gezichnet werden. Das neu Zeichnen wird mit dem Aufruf von invalidate erzwungen, auch wenn das System meinen sollte ne muss noch nicht sein. Du mußt die onDraw Methode also einfach nur überlagern. Aufrufen tust du sie indirekt über invalidate().
     
  3. lola48, 15.04.2012 #3
    lola48

    lola48 Threadstarter Neuer Benutzer

    Okay vielen dank. Jetzt nur, ob ichs richtig Verstanden habe, möchte ich einmal bisschen Code posten:
    Hier ist der Konstruktor der ausgeführt wird beim Gamestart und dort schreibe ich folgendes hin:
    Code:
    	public GameGUI(Context context, int breite, int hoehe) {
    		super(context);
    		s = new Spieler(breite, hoehe, context);
    		setRendererAndStart(spriteRenderer);
    
    
    // Hier wird das Starten der "paint()" erzwungen
    		invalidate();
    	}
    
    
    protected void onDraw(Canvas c) {
    		System.out.println("lol");
    // Zeichne irgendwas, bewege irgendwas
    blablabla code blablabla
    // Erzwinge dass Methode neu gestartet wird!!
    		postInvalidate();
      }
    
     
  4. strider, 15.04.2012 #4
    strider

    strider Erfahrener Benutzer

    Sofern GameGUI das View ist, das gerade angezeigt wird sollte es funktionieren. Das postInvalidate() wird benutzt wenn du in einem anderen Thread bist und nicht im ui Thread.
     
  5. lola48, 15.04.2012 #5
    lola48

    lola48 Threadstarter Neuer Benutzer

    Also ich hab das jetzt so eingefügt und die onDraw(Canvas c) methode wird NIE ausgeführt!

    Nach bisschen rumforschen hab ich gesehn, dass meine Klasse nicht View ist (also sie erstellt zwar die GUI, aber hat keine XML als View oder so), wie mach ich sie denn als View?

    View v = ???????
     
    Zuletzt bearbeitet: 15.04.2012
  6. DieGoldeneMitte, 15.04.2012 #6
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Das Beispiel hat einen schlechten Programmfluss.

    Im onDraw malt man den Zustand des Spiels, wie er gerade ist.
    Der postInvalidate muss von irgendwo anders kommen, wo die Veränderungen des Spieles ausgelöst werden (User Input, Zeitschleifen)

    ADD: Wie man eigenen eigenen GameView baut: Guckst du hier

    ADD: Achnee doch nicht soo doll. Also ich mache es meist so:
    1.) View bauen:
    Code:
    class MeinView extends View {
    
     // eventuell nach Bedarf onMeasure überladen
    
     ... onDraw( Canvas c ) { .... }
     ...
    }
    2.) View ganz normal im Layout einbauen:
    Code:
     ... <mein.paketname.MeinView ..... />
     
    Zuletzt bearbeitet: 15.04.2012
Die Seite wird geladen...
Ähnliche Themen Forum Datum
[Offen] Android Layout funktioniert nicht Android App Entwicklung 08.09.2017
[ERLEDIGT] LL zur Laufzeit erstellen, Abstand zwischen LL und LL möglich ? Android App Entwicklung 06.09.2017
[OFFEN] App schließt nach Öffnen sofort Android App Entwicklung 04.09.2017
[ERLEDIGT] Um einen Zusatz in einem Programm unter Android zu machen Android App Entwicklung 22.08.2017
[GESCHLOSSEN] Random ListItem ausgeben funktioniert nicht mehr Android App Entwicklung 13.08.2017
[OFFEN] Bild per Intent an ListView übergeben und anzeigen Android App Entwicklung 13.08.2017
[OFFEN] SVN Commit in Android Studio funktioniert nicht mehr Android App Entwicklung 07.08.2017
[ERLEDIGT] Android Studio Erste App-Programmierung Android App Entwicklung 02.08.2017
[ERLEDIGT] Android O Neue Fonts in XML Methode Android App Entwicklung 27.07.2017
[ERLEDIGT] Daten/Code meiner App speichern? Android App Entwicklung 27.07.2017
Du betrachtest das Thema "paint() in Android" im Forum "Android App Entwicklung",