首页 > 解决方案 > 带有进度条的 Android countDownTimer。无法设置进度

问题描述

我正在努力解决奇怪的问题,我已经用圆形进度条制作了倒数计时器。有时随着时间的流逝,进度条的剩余像素很少(x 和 t 之间的橙色),即使它达到了 onFinish 函数。这不再是问题,因为我将 countDownInterval 设置为 10,但随后 showProgress 函数不起作用,它进入 else 语句,但实际上并没有将进度条设置为 0。 interval-100-out of time

    private void startCountingTime() {

    if (!counting) {
        timeLeftInMillis = maxTime * 1000;
        endTime = System.currentTimeMillis() + timeLeftInMillis;
    }
    if (maxTime != 0) {
        countDownTimer = new CountDownTimer(timeLeftInMillis, 100) {

            @Override
            public void onTick(long l) {
                String text = String.format(Locale.getDefault(), "%02d:%02d",
                        TimeUnit.MILLISECONDS.toMinutes(l) % 60,
                        TimeUnit.MILLISECONDS.toSeconds(l) % 60);
                timeLeftInMillis = l;
                showProgress(l, maxTime);
                counting = true;
                question.setText(exposePasswd ? text : currentQuestion);//displays the timer or question
            }

            @Override
            public void onFinish() {
                step = 4;
                counting = false;
                progressBar.setProgress(0);
                question.setText("Out of time! doubletap for next question");
            }
        }.start();
    } else {
        question.setText("tap to reveal, doubletap for next");
        exposePasswd = false;
    }
}

private void showProgress(long l, int maxTime) {
    maxTime = maxTime * 1000;
    int prog = (int) ((l * 100) / maxTime);

    if (exposePasswd) {
        //   progressBar.setVisibility(View.VISIBLE);
        if (progressBar.getProgress() == 0) {
            progressBar.setProgress(prog);
        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            progressBar.setProgress(prog, true);
        } else {
            progressBar.setProgress(prog);
        }
    } else {
        progressBar.setProgress(0);
        Log.wtf("idk","setted");
    }
}

任何想法如何解决它?

标签: javaandroidprogress-barcountdowntimer

解决方案


我不确定为什么会发生这种情况,但是您可以通过添加以下内容轻松绕过此问题:

progressbar.setVisibility(Visibility.GONE);

在 else 语句中和

progressbar.setVisibility(Visibility.VISIBLE); 

当计时器开始时。


推荐阅读