我在我的代码中使用了countDownTimer。问题是,倒数计时器不准确。 onTick方法并不总是每秒执行一次,可能会减少几毫秒。当尝试基于millisUntilFinished执行某个任务时,这成为一个问题。我正在尝试记录20秒计时器的十秒钟时间:
以下是相关代码:
if (millisUntilFinished == 10000) { //TEN SECONDS
Log.v(TAG, "TEN SECONDS LEFT");
}
这里出现了问题,因为countDownTimer甚至可能 millisUntilFinished == 10000,它可能等于1001,所以我的代码不会执行。反正以某种方式围绕millisUntilFinished(这是一个很长的)到最接近的数千?我尝试过以下方法:
millisUntilFinishedRounded = MathUtils.round((double) millisUntilFinished, -3); // nearest thousand, 2000.0
但我无法解决' MathUtils'
我迷路了。我真的很感激任何反馈(积极或消极)!非常感谢你的帮助。
{Rich}
答案 0 :(得分:1)
有几种选择:
您可以通过添加N / 2将正整数舍入到最接近的N,除以N并再次乘以N:
((500 + millisUntilFinished)/ 1000)* 1000
您可以使用一个条件来检查该值是否在将舍入为10000的范围内:
millisUntilFinished> = 9500&& millisUntilFinished< 10500
您可以第一次检查boolean printedMessage = false;
while (true) {
millisUntilFinished = ...
if (!printedMessage && millisUntilFinished < 10000) {
System.out.println("Your message");
printedMessage = true;
}
}
是否低于10000:
(-1:nx+2,-1:ny+2,-1:nz+2)