2013-04-22 49 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

相关问题