Android 中带倒数计时器的圆形进度条

Circular progress bar with countdown timer in Android

我想显示一个带倒计时的圆形进度条 timer.And 计时器从 10 分钟开始到 0.In 我正在显示计时器的 Textview 并且工作正常。 但它并没有反映在 progressbar.Progress 栏中,根本没有变化。 下面是我试过的代码。

public class MainActivity extends AppCompatActivity {
    ProgressBar barTimer;
    CountDownTimer countDownTimer;
    TextView textTimer;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        barTimer = findViewById(R.id.barTimer);
        textTimer = findViewById(R.id.textTimer);
        barTimer.setProgress(100);
        startTimer(10);


    }

    private void startTimer(final int minuti) {
        countDownTimer = new CountDownTimer(60 * minuti * 1000, 500) {
            @Override
            public void onTick(long leftTimeInMilliseconds) {
                long seconds = leftTimeInMilliseconds / 1000;
                barTimer.setProgress((int)seconds);
                textTimer.setText(String.format("%02d", seconds/60) + ":" + String.format("%02d", seconds%60));
            }
            @Override
            public void onFinish() {
                if(textTimer.getText().equals("00:00")){
                    textTimer.setText("STOP");
                }
                else{
                    textTimer.setText("2:00");
                    barTimer.setProgress(60*minuti);
                }
            }
        }.start();

    }
}

xml代码

<TextView
        android:id="@+id/textTimer"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <ProgressBar
        android:id="@+id/barTimer"
        android:layout_below="@+id/textTimer"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:layout_centerInParent="true"
        android:indeterminate="false"
        android:progressDrawable="@drawable/circular_progress"

        />

谁能告诉我哪里错了以及如何解决这个问题?

所以我 运行 你的代码,发现是你给出的时间导致了问题,实际上 progressbar 正在做它的工作,但因为你给出的时间是 10 (分钟)最初这个过程太慢,你看不到它在工作,为了测试,尝试将它更改为 1,你会看到进度条移动。

startTimer(10);

startTimer(1);

您的比例因子不正确,因此您的 maxProgess 和 setProgess 值也是 incorrect.There 是解决此问题的两种方法。

1.Set 秒 = leftTimeInMilliseconds / 600 而不是 1000。

假设 X% = 1 秒,然后 100% = 60 秒,然后 X% = 100/60 秒,但我们是以毫秒计算的 因此 X% = 100/(60*1000) = 1/600 毫秒。 我们还为 100% 设置了 60 秒,因此将你的 setProgess 和 setMax 乘以一个因子 10.Since 600 秒是 10 分钟。

barTimer.setProgress(1000);
barTimer.setMax(1000);

long seconds = leftTimeInMilliseconds / 600;

2.Similar 到上面而不是除以 600 除以 6000。 seconds = leftTimeInMilliseconds / 6000;

假设 X% = 1 秒,然后 100% = 600 秒(10 分钟),然后 X% = 100/600 秒,但我们是以毫秒计算的 因此 X% = 100/(60*1000) = 1/6000 毫秒。

现在因为我们直接计算 10 分钟,所以不需要将你的 setProgess 和 setMax 乘以任何系数。

barTimer.setProgress(100);
barTimer.setMax(100);

long seconds = leftTimeInMilliseconds / 6000;

此外,我建议将 countDownInterval 设置为 1 秒而不是 0.5 秒。

希望这对您有所帮助。 如果有帮助,请将答案标记为已接受。