Обратный отсчет Прогресс-бар не работает Android
Я написал следующий код для создания индикатора выполнения обратного отсчета в моем приложении для Android:
ProgressBar gameTimer;
CountDownTimer gameCountDownTimer;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gameTimer = (ProgressBar)findViewById(R.id.game_timer);
setTimer(10);
}
private void setTimer(int time) {
progress = 100;
final int actualTime = time*1000;
gameTimer.setProgress(progress);
gameCountDownTimer = new CountDownTimer(actualTime, 1000) {
int totalTime = actualTime;
@Override
public void onTick(long millisUntilFinished) {
progress = (int)(( totalTime - millisUntilFinished ) /(double)totalTime * 100);
gameTimer.setProgress(progress);
}
@Override
public void onFinish() {
progress = 0;
gameTimer.setProgress(progress);
endGame();
}
};
}
Но проблема в том, что таймер всегда заполнен. Таймер не ведет обратный отсчет и никогда не заканчивается. Что не так с приведенным выше кодом? Как перевести индикатор выполнения из заполненного состояния в пустое состояние за заданное время?
1 ответ
Решение
Похоже, вы забыли начать CountDownTimer
, попробуй это:
private void setTimer(int time) {
progress = 100;
final int actualTime = time*1000;
gameTimer.setProgress(progress);
gameCountDownTimer = new CountDownTimer(actualTime, 1000) {
int totalTime = actualTime;
@Override
public void onTick(long millisUntilFinished) {
progress = (int)(( totalTime - millisUntilFinished ) /(double)totalTime * 100);
gameTimer.setProgress(progress);
}
@Override
public void onFinish() {
progress = 0;
gameTimer.setProgress(progress);
endGame();
}
}.start();
}
Как это описано здесь.
РЕДАКТИРОВАТЬ:
Ваш ProgressBar
считает, потому что вы неправильно поняли millisUntilFinishrd
переменная. Эта переменная уменьшается на каждом тике. Итак, чтобы сделать ваш ProgressBar обратным отсчетом, вы должны заменить это:
progress = (int)(( totalTime - millisUntilFinished ) /(double)totalTime * 100);
этим:
progress = (int)( millisUntilFinished /(double)totalTime * 100);