Hallo Ich versuche, SurfaceView und Threads zu verwenden, um schneller auf Canvas zu zeichnen. Bisher habe ich es geschafft, auf der Leinwand zu zeichnen, indem ich einfach die View-Klasse erweitere und die Draw-Methode einzeichne. Außerdem habe ich die Fähigkeit, die Zeichenfläche neu zu zeichnen, wenn Benutzer Eingaben über die Tastatur vornehmen (indem sie den Schlüsselcode einer Aktivität an die benutzerdefinierte Ansicht übergeben).Zeichnung auf Leinwand mit separatem Thread Android
Das Problem ist, dass ich mit Multithreading stecken bin, habe ich die View-Klasse mit der SurfaceView ersetzt und implementiert Runnable (gefolgt this Tutorial). Aber ich kann Schlüsselcode nicht übergeben, wenn Schlüsseleingabe aufgetreten ist. Wenn ich die invalidate() -Methode für die benutzerdefinierte Ansicht aufruft, passiert nichts. Der einzige Unterschied zu tutorial Code und Mine ist, dass ich while-Schleife dieser Linie Ende hinzugefügt:
retry = false;
Um Faden nach Zeichnungen zu stoppen ausführt. Und nach jedem Klick in Aktivität diese Zeile hinzugefügt, so dass ich alles neu zeichnen kann.
view.resume();
Probleme: -Blick nicht ungültig auf Schlüsselereignisse und nicht zieht keine neue Bilder (nicht sicher, warum)
, wenn ich durch den Aufruf Thread.Join Thread stop(); Methode, bleiben andere Objekte in CustomView im Heapspeicher oder werden sie zerstört?
Wie wird diese App automatisch beim Start ausgeführt und danach nur beim Klicken ausgeführt?
Warum Invalidate-Methode nicht die Zeichenfläche löschen, wenn ich explizit vor view.resume() aufrufen?
p.s. Ich muss Codebeispiele posten, lass es mich wissen und ich werde git Repo mit Test-App anhängen.
Dank
Ich habe das flüchtige Schlüsselwort hinzugefügt, aber nichts hat sich geändert. danke – hogar
posten Sie Ihren vollständigen Code –