2010-03-17 57 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

你不能操縱屏幕中一個單獨的線程。你應該使用一個處理程序,因爲它在UI線程上被調用。

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.addView之後調用l.invalidate(),但沒有運氣。 任何其他提示? – lbedogni

+0

這是因爲l是一個線性佈局。使它成爲一個FrameLayout,他們應該畫你想要的。 – CaseyB