Say I want to draw a line, then wait five seconds, then draw another line. I have a method like this:
public void onDraw(Canvas canvas) {
int w = canvas.getWidth();
int h = canvas.getHeight();
canvas.drawLine(w/2, 0, w/2, h-1, paint);
// PAUSE FIVE SECONDS
canvas.drawLine(0, h/2, w-1, h/2, paint);
}
How do I pause?
Don't wait in onDraw method it's called in the UI thread and you'll block it. Use flags to handle which line will be drawn
boolean shouldDrawSecondLine = false;
public void setDrawSecondLine(boolean flag) {
shouldDrawSecondLine = flag;
}
public void onDraw(Canvas canvas) {
int w = canvas.getWidth();
int h = canvas.getHeight();
canvas.drawLine(w/2, 0, w/2, h-1, paint);
if (shouldDrawSecondLine) {
canvas.drawLine(0, h/2, w-1, h/2, paint);
}
}
Than use it in your code like this
final View view;
// initialize the instance to your view
// when it's drawn the second line will not be drawn
// start async task to wait for 5 second that update the view
AsyncTask<Void, Void, Void> task = new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
}
return null;
}
@Override
protected void onPostExecute(Void result) {
view.setDrawSecondLine(true);
view.invalidate();
// invalidate cause your view to be redrawn it should be called in the UI thread
}
};
task.execute((Void[])null);
you can use a CountDownTimer like this :
public void onDraw(Canvas canvas) {
int w = canvas.getWidth();
int h = canvas.getHeight();
canvas.drawLine(w/2, 0, w/2, h-1, paint);
// PAUSE FIVE SECONDS
new CountDownTimer(5000,1000){
@Override
public void onTick(long miliseconds){}
@Override
public void onFinish(){
//after 5 seconds draw the second line
canvas.drawLine(0, h/2, w-1, h/2, paint);
}
}.start();
}
Regards,
Well... you could set a flag in (which would be in some other method) and within your onDraw()
based on the value of this flag draw that line.
i.e. maybe something like (though I'm not sure why you would need a pause)
invalidate();
pause/sleep();
//set flag
invalidate();
Use Thread.sleep(5000)
, that should do it.
来源:https://stackoverflow.com/questions/6665967/how-to-pause-for-5-seconds-before-drawing-the-next-thing-on-android