Android 带时延的异步任务onDraw方法

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

我想做一个活动,用户在开始时会看到第一条语句,然后在2秒后,会有第二条语句,最后会在onDraw方法的画布上显示进度计时器

计时器应该只持续5秒,但当我添加这两个2秒的中断时,用户将只看到最后一秒5-2-2。我试图更改计算进度的代码,但我只是让事情变得更糟

我删掉了变量声明和所有关于图形绘制的内容。也许我应该在不同的时刻声明开始时间和当前时间

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中的源代码注释应该用四个空格缩进。我修正了它。只是删除了不必要的评论。