2010-05-10 5 views
3

J'ai lu plusieurs forums et exemples sur l'utilisation de invalidate() afin de mettre à jour les vues immédiatement, mais je ne comprends toujours pas pourquoi ce que je fais ne fonctionnera pas. Le code ci-dessous utilise les boutons d'image définis par "rouge", "bleu", "vert" et "jaune". Je définis un délai d'une seconde entre chaque fois que j'essaie de changer l'apparence d'un bouton. S'il vous plaît, dites-moi ce que je fais de mal.(Android) Pourquoi ne pas invalider() mettre à jour mes boutons immédiatement?

private void showPattern() { 
    if (correct == true) { 
     for (int k = 0; k < temp_basket.length; k++) { 
      if (temp_basket[k] == 0) { 
       red.setPressed(true); 
       red.invalidate(); 
       final Handler handler = new Handler(); 
       Timer t = new Timer(); 
       t.schedule(new TimerTask() { 
        public void run() { 
         handler.post(new Runnable() { 
          public void run() { 
           red.setPressed(false); 
           red.invalidate(); 
          } 
         }); 
        } 
       }, 1000); 

Il y a 3 plus ou ces blocs après celui-ci qui sont bleu, vert et jaune.

Répondre

4

Invaliadate met un message redessiner dans la file d'attente

Comme je vois dans votre code, il y a plusieurs redessine qui se passe sur l'autre après ... le système d'exploitation va essayer d'optimiser le rendu par matraquer plusieurs redessiner les messages dans un (à condition qu'il n'y ait pas d'autre message entre eux).

Ce que vous pouvez faire est:

private Handler myHandler = new Handler() { 
    public void handleMessage(Message msg) 
    { 
     switch(msg.what) { /* do your work */ } 
    } 
}; 

Message msg = Message.obtain(myHandler); 
msg.what = <some-number>; 
msg.obj = <your-data-to-process> 

if(myHandler.containsMessage(<same-number>) { 
    myHandler.removeMessages(<same-number>); 
} 
myHandler.sendMessage(msg); 
1

Vous pouvez également essayer d'utiliser la méthode postInvalidate(), ce qui entraînera l'invalidate dans le thread d'interface utilisateur.

Questions connexes