Обратный отсчет Прогресс-бар не работает 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);
Другие вопросы по тегам