Java Android,倒计时器和ProgressBar(先读)

时间:2017-09-09 08:36:40

标签: java android android-layout

我已经倒数计时器,它由ProgressBar显示并成功完成。但不幸的是有问题。

  1. progressBar以1/5而不是0/5开始。并且在4/5进度中坚持2秒
  2. 如果我在

    之前回想起倒计时器的功能
    public void onFinish() {
    progresBar.setProgress(100);
    
    }
    
  3. 显示将会搞砸一段时间。

    我真的很想念Unity Engine Time.deltaTime;

    这是我的代码:

     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();
    

2 个答案:

答案 0 :(得分:2)

在设置进度之前,您正在递增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();

在开始新的之前这样做。

答案 1 :(得分:0)

use 
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();