Mo2*_*Mo2 5 android timer textview
我想CountDownTimer
在a中显示一个简单的TextView
,但它似乎从30下降到28,就好像它们之间存在滞后.我不确定如何修复这个小bug.这是我的代码:
这是在点击监听器中Button
:
new CountDownTimer(30000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
coolDownTimer.setText("Cool Down for: " + String.valueOf(millisUntilFinished / 1000));
}
@Override
public void onFinish() {
animatedPic.setClickable(true);
// reregister the proximity sensor
sm.registerListener(sensorListener, proxSensor, SensorManager.SENSOR_DELAY_NORMAL);
coolDownTimer.setText("GO!");
}
}.start();
Run Code Online (Sandbox Code Playgroud)
有两个问题:
第一个问题是倒数计时器直到第一次打勾的时间已经过去,在这种情况下,在1000ms之后.
第二个是经过的时间只是近似值.millisUntilFinished不保证以间隔为增量(您可以看到,如果不除以1000,则第一个刻度略低于29000).
另外要记住的是,您不能保证会收到勾号.也就是说,如果设备没有足够的时间来完成勾选,它可能会跳过它(通常只有更快的间隔才能注意到).
要解决问题1,您只需运行onTick代码(或将其重构为自己的方法)并在启动倒数计时器时运行它.
对于问题2,您可以简单地对数字进行舍入.
例如:
new CountDownTimer(30000, 1000)
{
@Override
public void onTick(long millisUntilFinished)
{
performTick(millisUntilFinished);
}
@Override
public void onFinish()
{
animatedPic.setClickable(true);
// reregister the proximity sensor
sm.registerListener(sensorListener,proxSensor,SensorManager.SENSOR_DELAY_NORMAL);
coolDownTimer.setText("GO!");
}
}.start();
performTick(30000);
Run Code Online (Sandbox Code Playgroud)
void performTick(long millisUntilFinished) {
coolDownTimer.setText("Cool Down for: " + String.valueOf(Math.round(millisUntilFinished * 0.001f)));
}
Run Code Online (Sandbox Code Playgroud)
如果要确保以最小延迟更新适当的值,可能需要考虑减少间隔.