Warum wird die benutzerdefinierte Ansicht nicht invalidiert?

7

Ich bin ein Anfänger auf Android-Entwicklung, und ich habe Probleme, eine Ansicht ungültig zu machen. Ich verwende diese Anleitung und habe keine Probleme bei der Umsetzung. Wenn ich jedoch den Hintergrund der Ansicht ändere, reagiert er immer noch so, als wäre der vorherige Hintergrund noch festgelegt. Mit anderen Worten, ich ändere die Maske, aber meine "Touchview" -Klasse sieht die neue Maske nicht. Ich hatte kein Glück mit Invalidate, um die Ansicht zu aktualisieren, und ich habe überprüft, dass die Maske tatsächlich als Hintergrund zurückgesetzt wird. Jede Hilfe würde sehr geschätzt werden.

MEIN CODE

%Vor%     
B. Money 07.05.2013, 12:16
quelle

1 Antwort

22

Ich kann in zwei Möglichkeiten denken:

Option 1: Sie führen Ihren Code aus einem Nicht-UI-Thread aus. Verwenden Sie in diesem Fall postInvalidate () anstelle von invalidate ()

  

postInvalidate (): Veranlassen, dass ein ungültiger Wert in einem nachfolgenden Zyklus auftritt   durch die Ereignisschleife. Verwenden Sie dies, um die Ansicht von einer Nicht-UI ungültig zu machen   thread.

Option 2: Sie führen Ihren Code über den UI-Thread aus. In diesem Fall müsste ich mehr Code posten. Denken Sie daran, dass invalidate() asynchron ist, da nur ein Redraw in der Haupt-Thread-Ereigniswarteschlange geplant wird. Dies bedeutet, dass das Neuzeichnen nur ausgeführt wird, wenn der aktuelle Code vollständig ausgeführt wurde.

In diesem Fall können Sie, wenn etwas Ihren UI-Thread blockiert, AsyncTask oder Runnable verwenden, um Ihre Aufgabe auszuführen.

    
Alejandro Colorado 18.05.2013, 01:20
quelle

Tags und Links