Android 带时延的异步任务onDraw方法
我想做一个活动,用户在开始时会看到第一条语句,然后在2秒后,会有第二条语句,最后会在onDraw方法的画布上显示进度计时器 计时器应该只持续5秒,但当我添加这两个2秒的中断时,用户将只看到最后一秒5-2-2。我试图更改计算进度的代码,但我只是让事情变得更糟 我删掉了变量声明和所有关于图形绘制的内容。也许我应该在不同的时刻声明开始时间和当前时间Android 带时延的异步任务onDraw方法,android,android-asynctask,ondraw,Android,Android Asynctask,Ondraw,我想做一个活动,用户在开始时会看到第一条语句,然后在2秒后,会有第二条语句,最后会在onDraw方法的画布上显示进度计时器 计时器应该只持续5秒,但当我添加这两个2秒的中断时,用户将只看到最后一秒5-2-2。我试图更改计算进度的代码,但我只是让事情变得更糟 我删掉了变量声明和所有关于图形绘制的内容。也许我应该在不同的时刻声明开始时间和当前时间 public class CircleTimer extends Activity { @Override protected void
public class CircleTimer extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final CircularCountdown view = new CircularCountdown(this);
setContentView(view);
AsyncTask<Void, Boolean, Void> task = new AsyncTask<Void, Boolean, Void>() {
@Override
protected Void doInBackground(Void... params) {
try {
Thread.sleep(2000);
publishProgress(true);
Thread.sleep(2000);
} catch (InterruptedException e) {
}
return null;
}
protected void onProgressUpdate(Boolean... progress) {
view.setSecondDrawStep(progress[0]);
view.invalidate();
}
@Override
protected void onPostExecute(Void result) {
view.setThirdDrawStep(true);
view.invalidate();
}
};
task.execute((Void[])null);
}
private class CircularCountdown extends View {
public CircularCountdown(Context context) {
super(context);
maxTime = 5000;
startTime = System.currentTimeMillis();
currentTime = startTime;
viewHandler = new Handler();
updateView = new Runnable(){
@Override
public void run(){
currentTime = System.currentTimeMillis();
progressMillisecond = Math.abs(startTime - currentTime) % maxTime;
progress = (double) (progressMillisecond) / maxTime;
CircularCountdown.this.invalidate();
viewHandler.postDelayed(updateView, 1000/60);
}
};
viewHandler.post(updateView);
}
boolean secondDrawStep = false;
boolean thirdDrawStep = false;
public void setSecondDrawStep(boolean flag) {
secondDrawStep = flag;
}
public void setThirdDrawStep(boolean flag) {
thirdDrawStep = flag;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawText("FIRST statement",
centerWidthCenter,
centerHeightCenter + textOffset,
nameTextPaint);
if (secondDrawStep) {
canvas.drawColor(Color.WHITE);
canvas.drawText("SECOND statement",
centerWidthCenter,
centerHeightCenter + textOffset,
nameTextPaint);
}
if (thirdDrawStep) {
canvas.drawColor(Color.WHITE);
canvas.drawArc(circleBounds, -90, (float) (progress * 360), false, progressPaint);
canvas.drawText((int) Math.abs(5 - (progressMillisecond / 1000)) + "s",
centerWidth,
centerHeight + textOffset,
textPaint);
}
}
}
}
你能修改一下你的格式吗?SO中的源代码注释应该用四个空格缩进。我修正了它。只是删除了不必要的评论。