按下按钮后增加速度的倒数计时器

Countdown timer that that increases speed after button press

我正在尝试创建一个倒数计时器,它会在按下按钮后加快速度我还使用计数器来调整进度条。

现在我在按下按钮后调整速度(增加)但它不是从头开始。例如,当我启动我的程序时,计时器从头开始并逐渐减少,这很好。但是,当我按下按钮时,计数器不会像这样从头开始:

我只想在每次按下按钮后使其运行更快,而不是减少长度。

这是我的代码:

 mTrueBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //is the user right? if pressing True button
            if(isMathProblemTrue == 1){
                //user is correct
                Toast.makeText(MainActivity.this,"Correct!",Toast.LENGTH_SHORT).show();
                generateMathProblem();
                timer_length *= 0.8;
                timer_interval *= 0.8;
                Log.d(TAG,"time length:"+timer_length);
                Log.d(TAG,"time interval:"+timer_interval);
                mCountDownTimer.cancel();
                createNStartTimer();
                //restartTimer();
            }else{
                //user is incorrect
                transferUserToStartScreen();
                //reset the timer
                mCountDownTimer.cancel(); // cancel
            }
        }
    });
private void createNStartTimer() {
    mCountDownTimer = new CountDownTimer(timer_length,timer_interval) {
        @Override
        public void onTick(long millisUntilFinished) {
            Log.d(TAG,"Mil until finish:"+millisUntilFinished);
            int progress = (int) (millisUntilFinished/100);
            mProgressBar.setProgress(progress);
        }
        @Override
        public void onFinish() {
            mProgressBar.setProgress(0);
            transferUserToStartScreen();
        }
    }.start();
}

在函数外创建 2 个全局常量

int totalMillisUntilFinished = 0;
bool firstTime = true;

我们在调用 onTick 时初始化 totalMillisUntilFinished,因此请更新您的 onTick 函数:

private void createNStartTimer() {
    firstTime = true;
    mCountDownTimer = new CountDownTimer(timer_length,timer_interval) {
        @Override
        public void onTick(long millisUntilFinished) {
            if(firstTime){totalMillisUntilFinished = millisUntilFinished; firstTime = false;}
            Log.d(TAG,"Mil until finish:"+millisUntilFinished);
            int progress = (int) (millisUntilFinished*100/totalMillisUntilFinished);
            mProgressBar.setProgress(progress);
        }

就我个人而言,我使用 HandlersRunnables,我绝对建议您研究一下。