2011-09-27 75 views
1

我想在抽两张抽签之间暂停一下。我已经尝试Thread.sleep,处理程序,asyncTask,并得到了相同的结果 - 当活动启动时,我必须等待一段时间,我设置了第一次绘制,只有当我再次调用同样的方法(测试)时,我看到第二次绘制,而不是再次看到第一名。有我的代码:在两次抽签之间暂停

public void test(){ 
button.setClickable(false); 
button.setBackgroundColor(Color.DKGRAY); 
view.setFromAtoB(true); 
view.invalidate(); 
AsyncTask<Void, Void, Void> task = new AsyncTask<Void, Void, Void>() { 
    @Override 
    protected Void doInBackground(Void... params) { 
     try { 
      Thread.sleep(2000); 
     } catch (InterruptedException e) { 
      } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     view.setMoveAB(true); 
     view.postInvalidate(); 
     button.setBackgroundColor(Color.GRAY); 
     button.setClickable(true);   
    } 
}; 
task.execute((Void[])null); 

问题在哪里?为什么我不能看到某种和谐,第一次画,暂停,第二次画? :)也许我已经阻止了UI线程。对于绘图我使用画布。在onDraw方法我做了一些计算,调用drawRodsAndDiscs方法:

private void drawRodsAndDiscs(Canvas canvas){ 
    Paint paint = new Paint(); 
    drawRods(canvas); 
    paint.setColor(Color.GREEN); 
    paint.setStyle(Paint.Style.STROKE); 
    for (Rect disc : discs) { 
     canvas.drawRect(disc, paint); 
    } 
} 

回答

0

我会使用此代码为您的问题。 定时器完成后,它会自动重新启动。 试试这个:

private boolean running = false; 
private Handler handler; 

public void onCreate(Bundle savedInstanceState) { 
    handler = new Handler(this.getMainLooper()); //Run it in MainLooper 
    this.handler.postDelayed(this.counterThread, 200); //Start timer in 200ms 
} 

private Thread counterThread = new Thread() { 
public void run() { 
     if (isRunning()) { 
      return; 
     } 
     setRunning(true); 

// 10minute until finish, 200ms between ticks 
     CountDownTimer ct = new CountDownTimer(10 * 60 * 1000, 200) { 

      public void onFinish() { 
       setRunning(false); 
      } 

      public void onTick(long time) { 
        //Do your shitznaz 
      } 
     }; 
     ct.start(); 
    } 
}; 

protected boolean isRunning() { 
    return this.running; 
} 
protected void setRunning(boolean b) { 
    this.running = b; 
    if (!b) { 
     // Reset timer 
     this.handler.postDelayed(this.counterThread, 200); //Restarts the timer in 200ms 
    } 
} 
1

尝试使用简单CountDownTimer代替了Thread.sleep(INT毫秒);

参考this

0

对于一个简单的一次性的延迟,你可以使用一个Handler代替:

 Handler handler = new Handler(); 
     handler.postDelayed(new Runnable() {     
      @Override 
      public void run() { 
       view.setMoveAB(true); 
       view.invalidate(); 
       button.setBackgroundColor(Color.GRAY); 
       button.setClickable(true); 
      } 
     }, 2000);