Java Android,Countdown Timer和ProgressBar(首先阅读)



我有计数计时器,该计时器由progressbar显示并成功。但不幸的是有问题。

  1. 进度栏以1/5而不是0/5启动。并在4/5的进度中卡住了2秒
  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();

最新更新