Android 工作室暂停和恢复进度条的倒数计时器

Android studio pause and resume countdown timer for progress bar

我正在使用一个倒数计时器来更新我的进度条,它从 100(满)减少到 0(空)但是当应用程序暂停时我想暂停计时器,然后在恢复应用程序时重新启动它。我像这样实现倒数计时器:

public class MyCountDownTimer extends CountDownTimer {


    public MyCountDownTimer(long millisInFuture, long countDownInterval) {
        super(millisInFuture, countDownInterval);
    }

    @Override
    public void onTick(long millisUntilFinished) {
        int progress = (int) (millisUntilFinished / 100);
        progressBar.setProgress(progress);
    }

    @Override
    public void onFinish() {
        progressBar.setProgress(0);
        Intent intent = new Intent(getApplicationContext(), GameOver.class);
        startActivity(intent);
        finish();
    }

}

在我的创建中:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_play_screen);

    progressBar = (ProgressBar)findViewById(R.id.timerBar);
    progressBar.setProgress(100);
    myCountDownTimer = new MyCountDownTimer(10000, 10);
    myCountDownTimer.start();
}

您可以在 MyCountDownTimer class 中添加一个布尔值,它会在 onPauseonResume 方法中发生变化 Activity。查看 // ADDED 评论,了解您必须做出的更改才能使这项工作生效。

public class MyActivity extends Activity {

    MyCountDownTimer myCountDownTimer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_play_screen);

        progressBar = (ProgressBar)findViewById(R.id.timerBar);
        progressBar.setProgress(100);
        myCountDownTimer = new MyCountDownTimer(10000, 10);
        myCountDownTimer.start();
    }

   // ADDED
   @Override
   public void onPause() {
       super.onPause();  // Always call the superclass method first
       myCountDownTimer.pause();
   }

   // ADDED
   @Override
   public void onResume() {
       super.onResume();  // Always call the superclass method first
       myCountDownTimer.resume();
   }

}


public class MyCountDownTimer extends CountDownTimer {

    // ADDED
    private boolean pause;

    public MyCountDownTimer(long millisInFuture, long countDownInterval) {
        super(millisInFuture, countDownInterval);
    }

    // ADDED
    public void pause() {
        pause = true;
    }

    // ADDED
    public void resume() {
        pause = false;
    }

    @Override
    public void onTick(long millisUntilFinished) {
        int progress = (int) (millisUntilFinished / 100);

        // ADDED
        if (!pause) {
            progressBar.setProgress(progress);
        }
    }

    @Override
    public void onFinish() {
        // ADDED
        isRunning = false;

        progressBar.setProgress(0);
        Intent intent = new Intent(getApplicationContext(), GameOver.class);
        startActivity(intent);
        finish();
    }
}