我有计数计时器,该计时器由progressbar显示并成功。但不幸的是有问题。
- 进度栏以1/5而不是0/5启动。并在4/5的进度中卡住了2秒
-
如果我回想起计数计时器的功能
public void onFinish() { progresBar.setProgress(100); }
显示会搞砸一段时间。
我真的很想念Time.deltaTime
的Unity Engine;
这是我的代码:
countDownTimer2 = new CountDownTimer(5000,1000) {
int i = 0;
@Override
public void onTick(long milliSecondUntilFinished) {
i++;
progresBar.setProgress((int) i * 100 / (5000/1000));
}
@Override
public void onFinish() {
progresBar.setProgress(100);
}
}.start();
在设置进度之前,您正在增加i
变量。当第一次调用OnTick()时,i
的值为1
。因此,您正在设置的进度是20
,等效于1/5
。使用此 -
@Override
public void onTick(long milliSecondUntilFinished) {
progresBar.setProgress((int) i * 100 / (5000/1000));
i++;
}
另外,您应该更好地使用milliSecondUntilFinished
来找到进度,而不是不必要地引入i
变量。
出于显示问题的问题,我高度怀疑您在调用新的计时器之前尚未取消已经运行的计时器。如果是的,那么两个计时器都将运行到较旧的一个结束(直到此点,进度条将表现出奇怪的)。
您可以取消以前的计时器为 -
countDownTimer2.cancel();
在开始新的之前,请执行此操作。
使用:
countDownTimer2 = new CountDownTimer(1000,5000) {
int i = 0;
@Override
public void onTick(long milliSecondUntilFinished) {
i++;
progresBar.setProgress((int) i * 100 / (5000/1000));
}
@Override
public void onFinish() {
progresBar.setProgress(100);
}
}.start();