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?
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,
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);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With