paint() in Android

L

lola48

Neues Mitglied
0
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)
 
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().
 
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();
  }
 
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.
 
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:
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:

Ähnliche Themen

D
Antworten
23
Aufrufe
2.561
Data2006
D
OnkelLon
Antworten
13
Aufrufe
1.987
OnkelLon
OnkelLon
M
Antworten
4
Aufrufe
1.173
swa00
swa00
Zurück
Oben Unten