为什么此代码不起作用?
此代码应将倒计时器延长到 10 秒(每次当点为 20 、 40 、 60 时)等。但是当我启动它并且我的分数为 20 时,它会在 TextView 中显示正确的时间值。但是然后它在 1 秒内消失,倒计时器得到旧值并继续。有人有想法吗?
int bonus_time = 1 , sec = 10000 , point == 0;
points_timer =new CountDownTimer(sec,1000) {
@Override
public void onTick(long millisUntilFinished)
{
if ( point == (bonus_time * 20))
{
++bonus_time;
millisUntilFinished += 10000;
sec += 10000;
}
++point;
}
@Override
public void onFinish()
{
bonus_time = 1;
}
};
最佳答案
当您使用 sec
变量创建计时器时,它不会神奇地将两者连接起来,因此当 sec
的值更改时,计时器的时间也会发生变化,它仅在您创建计时器时使用 sec
的值一次。
更改 millisUntilFinished
也是如此,它是您从回调中获取的参数,通过更改其值,您不会执行任何操作。
更改计时器时间的唯一方法是创建一个新计时器。这是我的建议:
// GLOBAL VARIABLES
CountDownTimer points_timer;
int bonus_time = 1 , sec = 10000 , point == 0;
public void createTimer()
{
points_timer =new CountDownTimer(sec,1000) {
@Override
public void onTick(long millisUntilFinished)
{
sec = millisUntilFinished;
if ( point == (bonus_time * 20))
{
++bonus_time;
//millisUntilFinished += 10000;
sec += 10000;
createTimer();
}
++point;
}
@Override
public void onFinish()
{
bonus_time = 1;
}
};
}
计时器的创建由一个函数包围,每次获得奖金时都会调用该函数,以使用新的秒
值重新创建计时器。
- 您还应该调用该方法一次来代替之前的代码,以最初创建计时器。
希望这能起作用..
关于java - 延长倒计时器的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23029059/