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 秒。
希望这对您有所帮助。
如果有帮助,请将答案标记为已接受。
我想显示一个带倒计时的圆形进度条 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 秒。
希望这对您有所帮助。 如果有帮助,请将答案标记为已接受。