2010-03-17 7 views
0

Salut J'essaye de construire une mise en page où certaines formes apparaîtront toutes les 2 secondes. Si l'utilisateur clique sur l'une de ces formes, il doit disparaître .Plusieurs formes sur Android

Quelle est la bonne façon de procéder? J'ai pensé à un fil, mais j'ai raté. Voici mon code au moment (ne fonctionne pas):

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     l = new LinearLayout(this); 
     setContentView(l); 

    int counter = 1; 
    View v = new CustomDrawableView(this,20,50); 

    l.addView(v); 

    Thread t = new Thread() { 
      public void run() { 


        while (true) { 
         Log.i("THREAD","INSIDE"); 
         View h = new CustomDrawableView(c, 
         (int)Math.round(Math.random()*100), 

         (int)Math.round(Math.random()*100)); 
         SystemClock.sleep(2000); 
         l.addView(h); 
        } 
       } 
     }; 
     t.start(); 
    } 

Répondre

1

Vous ne pouvez pas manipuler l'écran dans un thread séparé. Vous devez utiliser un gestionnaire car il est appelé sur le thread d'interface utilisateur.

public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    l = new LinearLayout(this); 
    setContentView(l); 

    int counter = 1; 
    View v = new CustomDrawableView(this,20,50); 

    l.addView(v); 

    ShapeHandler handler = new ShapeHandler(); 
    handler.sendEmptyMessage(0); 
} 

private class ShapeHandler extends Handler 
{ 
    @Override 
    public void handleMessage(Message msg) 
    { 
     View h = new CustomDrawableView(c, 
      (int)Math.round(Math.random()*100), 
      (int)Math.round(Math.random()*100)); 
     l.addView(h); 
     this.sendEmptyMessageDelayed(0, 2000); 
    } 
} 
+0

Merci Casey, je vais essayer dès que possible. – lbedogni

+0

J'ai essayé, mais la forme reste la première et la seule. J'ai mis quelques informations de journal et je vois que la méthode handleMessage() est appelée, mais aucune nouvelle forme n'est dessiné. J'ai également essayé d'appeler l.invalidate() après l.addView, mais sans succès. Une autre indication? – lbedogni

+0

C'est parce que l est une disposition linéaire. Faites-en un FrameLayout et ils devraient dessiner comme vous voulez. – CaseyB

Questions connexes