2011-06-21 6 views
4

La méthode onDraw de mon SurfaceView dessine un LinkedList de chemins déterminés par TouchEvents sur l'écran. Je veux ajouter une fonctionnalité d'annulation qui supprime le dernier nœud de chemin de la LinkedList. Lorsque le bouton est touché, le chemin est supprimé de la liste, mais le SurfaceView ne se met pas à jour jusqu'à ce que je clique à nouveau sur le bouton Annuler ou touche l'écran.Android SurfaceView onDraw Question

Merci, Eric

+0

Vous pourriez essayer de poser une question spécifique, en montrant certains de vos codes pertinents, et en marquant les bonnes réponses pour vos anciennes questions comme acceptées. – kabuko

Répondre

3

OnDraw est appelé toutes les 60 ms dans un fil, mais il est pas mis à jour il qui me confond.

vous devriez utiliser:

postInvalidate(); 

pas

invalidate(); 

postInvalidate(); dit le thread principal de l'interface utilisateur de redessiner sa prochaine pratique. La façon dont vous le faites ne fonctionnera pas sur un fil séparé.

0

C'est que des vues sont mises à jour lors de l'appel onDraw(), ce qui est dû à l'activité de l'écran (comme vous le toucher) ou quand il est forcé de le faire programatically ainsi.

Vous voulez le forcer: utilisez la méthode invalidate() héritée de View.

Si la suppression se produit à l'intérieur de SurfaceView, il suffit d'écrire invalidate() APRÈS avoir terminé la suppression. Si cela arrive à l'extérieur, faites simplement surfaceViewInstance.invalidate().

Hope this helps

+0

J'ai essayé d'utiliser invalidate dans le SurfaceView mais il n'est toujours pas mis à jour. OnDraw est appelé toutes les 60 ms dans un thread mais il n'est pas mis à jour là, ce qui me rend confus. – erversteeg