按下按钮后增加速度的倒数计时器
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);
}
就我个人而言,我使用 Handlers
和 Runnable
s,我绝对建议您研究一下。
我正在尝试创建一个倒数计时器,它会在按下按钮后加快速度我还使用计数器来调整进度条。
现在我在按下按钮后调整速度(增加)但它不是从头开始。例如,当我启动我的程序时,计时器从头开始并逐渐减少,这很好。但是,当我按下按钮时,计数器不会像这样从头开始:
我只想在每次按下按钮后使其运行更快,而不是减少长度。
这是我的代码:
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);
}
就我个人而言,我使用 Handlers
和 Runnable
s,我绝对建议您研究一下。