2010-03-17 2 views
0

Привет Я пытаюсь построить макет, где некоторые фигуры будут всплывать каждые 2 секунд. Если пользователь нажмет одну из этих фигур, они исчезнут с .Несколько фигур на Android

Каков правильный способ сделать это? Я думал о нитке, но я пропустил . Вот мой код в данный момент (не работает):

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(); 
    } 

ответ

1

Вы не можете управлять экраном в отдельном потоке. Вы должны использовать обработчик, так как он вызывается в потоке пользовательского интерфейса.

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

Спасибо Кейси, я попробую это как можно скорее. – lbedogni

+0

Я пробовал это, но форма остается первой и единственной. Я поместил некоторые данные журнала, и я вижу, что метод handleMessage() вызывается, но никакой новой формы не является ничья. Я также попытался вызвать l.invalidate() после l.addView, но не повезло. Любые другие намеки? – lbedogni

+0

Это потому, что l - линейная компоновка. Сделайте это FrameLayout, и они должны рисовать, как вы хотите. – CaseyB

Смежные вопросы