我想显示一个带有倒数计时器的圆形进度条,并且计时器从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"
/>
谁能告诉我哪里出问题了以及如何解决这个问题?
您的缩放比例不正确,因此maxProgess和setProgess值也不正确。有两种解决方法。
1.设置秒数= 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。秒= 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秒。
希望这可以帮助。如果有帮助,请将答案标记为已接受。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句