2013-04-22 71 views
0

我試圖讓我的textView每分鐘或每兩分鐘出現在屏幕的不同位置(延遲並不重要)。我見過有人建議我使用runOnUiThread來讓定時器重複隨機函數並更新UI。使用runOnUiThread重複使用此函數來更新textview位置

我真的很掙扎讓我的頭繞着這些不同的線程,只是想知道是否有人可以給我一個例子?或者我應該研究使用不同的東西?

Public class MainActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    TextView textView = (TextView) findViewById(R.id.digitalClock1); 
    Random r = new Random(); 

    int x = r.nextInt(350 - 100); 
    int y = r.nextInt(800 - 100); 

    textView.setX(x); 
    textView.setY(y); 
} 
+0

你必須使用runOnUiThread更新您的TextView,但不要在此線程運行定時器()方法!使用新線程shedule或SheduledExecutorService:https://developer.android.com/reference/java/util/concurrent/ScheduledExecutorService.html – luxer 2013-04-22 15:28:48

回答

0

嘗試此方法

public void doInback() 
    { 
     handler.postDelayed(new Runnable() { 

      @Override 
      public void run() 
      { 
       // TODO Auto-generated method stub 
       // Try the code that you want to repeat 


       doInback(); 
      } 
     }, 1000); 

    } 

只需撥打您要使用的方法。

+0

然後,我會如何調用此更新UI? – rebble 2013-04-22 16:13:59

+0

如果調用這個方法,它會不會只重複一次該函數? – rebble 2013-04-22 16:21:24

0

創建可運行及以下

private Runnable runnable = new Runnable(){ 
    @Override 
    public void run() {   
     handler.sendEmptyMessage(0); 
    } 
}; 
Handler handler = new Handler() {  
    @Override 
    public void handleMessage(Message msg) {    
     //change the text position here   
     this.postDelayed(runnable , TIME_OUT_MS); 
     } 
    }; 

處理程序的TIME_OUT_MS是您在毫秒要超時。

,並把這個在OnCreate中的活性

Thread thread =new Thread(runnable); 
    thread.start(); 
+0

好吧,原諒我的無知,但我究竟把最後一個「Thread thread = new Thread(runnable); thread.start();」位? – rebble 2013-04-24 08:55:27