循环进度条,包含Android中的倒数计时器

时间:2018-03-08 07:17:55

标签: android android-progressbar countdowntimer

我想用倒数计时器显示循环进度条。计时器从10分钟开始到0.在Textview中我显示计时器,并且工作正常。 但它并没有反映在进度条中。进度条根本没有变化。 以下是我试过的代码。

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"

        />

任何人都可以告诉我哪里出错了以及如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

您的缩放系数不正确,因此您的maxProgess和setProgess值也不正确。有两种方法可以解决此问题。

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

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

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

long seconds = leftTimeInMilliseconds / 600;

2.与上述类似,而不是除以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秒。

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

答案 1 :(得分:0)

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

startTimer(10);

startTimer(1);