圆形倒数计时器? (毫秒精度)?
Round CountDown timer? (millispersecond accuracy)?
我在我的代码中使用了 countDownTimer。问题是,倒数计时器不准确。 onTick 方法不会总是每秒执行一次,它可以有几毫秒的偏差。当尝试执行基于 millisUntilFinished 的特定任务时,这会成为一个问题。当我的 20 秒计时器过去 10 秒时,我正在尝试记录:
相关代码如下:
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}
有几种选择:
您可以将正整数四舍五入到最接近的 N,方法是加 N/2,除以 N 再乘以 N:
((500 + millisUntilFinished) / 1000) * 1000
您可以使用一个条件来检查值是否在四舍五入到 10000 的范围内:
millisUntilFinished >= 9500 && millisUntilFinished < 10500
您可以第一次检查 millisUntilFinished
跌破 10000:
boolean printedMessage = false;
while (true) {
millisUntilFinished = ...
if (!printedMessage && millisUntilFinished < 10000) {
System.out.println("Your message");
printedMessage = true;
}
}
我在我的代码中使用了 countDownTimer。问题是,倒数计时器不准确。 onTick 方法不会总是每秒执行一次,它可以有几毫秒的偏差。当尝试执行基于 millisUntilFinished 的特定任务时,这会成为一个问题。当我的 20 秒计时器过去 10 秒时,我正在尝试记录:
相关代码如下:
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}
有几种选择:
您可以将正整数四舍五入到最接近的 N,方法是加 N/2,除以 N 再乘以 N:
((500 + millisUntilFinished) / 1000) * 1000
您可以使用一个条件来检查值是否在四舍五入到 10000 的范围内:
millisUntilFinished >= 9500 && millisUntilFinished < 10500
您可以第一次检查
millisUntilFinished
跌破 10000:boolean printedMessage = false; while (true) { millisUntilFinished = ... if (!printedMessage && millisUntilFinished < 10000) { System.out.println("Your message"); printedMessage = true; } }