如何使用TimerTask连续运行?

时间:2016-07-13 17:32:30

标签: android canvas timer live-wallpaper movie

我正在创建一个动态壁纸应用。我想要的是,在这个应用程序中经过一段时间后,电影对象将在surfaceHolder canvas上绘制其框架。

我的代码是

public void startTimer() {
  timer = new Timer();
  initializeTimerTask();

}

private void initializeTimerTask() {
  timerTask = new TimerTask() {@
    Override
    public void run() {
      Canvas canvas = holder.lockCanvas();
      canvas.save();
      // Adjust size and position so that
      // the image looks good on your screen
      canvas.scale(1f, 1f);
      movie.draw(canvas, -500, 0);
      canvas.restore();
      holder.unlockCanvasAndPost(canvas);
      movie.setTime((int)(System.currentTimeMillis() % movie.duration()));

    }
  };
  timer.schedule(timerTask, 33);
}

但是当我运行这个应用程序时,表面上只显示一个框架,并且它不会随着时间的推移而改变。

我的代码中有什么错误?我怎么能看到表面随时间变化?

1 个答案:

答案 0 :(得分:0)

您的计时器任务仅在您需要再次在任务内重新安排时安排

private void initializeTimerTask() {
  timerTask = new TimerTask() {@
    Override
    public void run() {
      Canvas canvas = holder.lockCanvas();
      canvas.save();
      // Adjust size and position so that
      // the image looks good on your screen
      canvas.scale(1f, 1f);
      movie.draw(canvas, -500, 0);
      canvas.restore();
      holder.unlockCanvasAndPost(canvas);
      movie.setTime((int)(System.currentTimeMillis() % movie.duration()));
      timer.schedule(timerTask, 33);    
    }
  };
  timer.schedule(timerTask, 33);
}

您需要将timer设为final才能工作