Я пытаюсь создать последовательность таймеров CountDownTimers в своем приложении для Android с помощью Java, где каждый таймер запускается только после завершения предыдущего. Последовательность должна повторяться определенное количество раундов с некоторыми вариациями (например, пропуск периода отдыха в последнем раунде). Вот какой порядок мне нужен:
Запустите 3-секундный таймер обратного отсчета. ДОЖДИТЕ ОКОНЧАНИЯ
После этого запустите основной таймер. ДОЖДИТЕСЬ ОКОНЧАНИЯ
Затем запустите таймер отдыха.
Повторите последовательность указанное количество раундов.
У меня возникли проблемы с обеспечением последовательного выполнения каждого таймера, даже при попытке использовать цикл while. Есть какие-нибудь предложения о том, как с этим справиться? Вот что у меня есть на данный момент (пытаюсь использовать While Loop):
Я пытаюсь создать последовательность таймеров CountDownTimers в своем приложении для Android с помощью Java, где каждый таймер запускается только после завершения предыдущего. Последовательность должна повторяться определенное количество раундов с некоторыми вариациями (например, пропуск периода отдыха в последнем раунде). Вот какой порядок мне нужен: [list] [*]Запустите 3-секундный таймер обратного отсчета. ДОЖДИТЕ ОКОНЧАНИЯ [*]После этого запустите основной таймер. ДОЖДИТЕСЬ ОКОНЧАНИЯ [*]Затем запустите таймер отдыха. [*]Повторите последовательность указанное количество раундов. [/list] У меня возникли проблемы с обеспечением последовательного выполнения каждого таймера, даже при попытке использовать цикл while. Есть какие-нибудь предложения о том, как с этим справиться? Вот что у меня есть на данный момент (пытаюсь использовать While Loop):
// Initialize the TextView textView = findViewById(R.id.textViewTimer);
// Start CDT 1 //Start the CountDown //Avoiding infite runs boolean didThreeSecondsRun = false; boolean didMainTimerRun = false; boolean didRestTimerRun = false; while (isTimerRunning) { //Run for as many rounds as necessary / //TO-DO Wrap this with FOR loops for Rounds //First Check: Is 3 Seconds Countdown? if (isThreeSecondsCountDownOver && !didThreeSecondsRun){ StartCountDownTimer(2000, 1); //Turn 3 SEC off didThreeSecondsRun = true; } if (!isThreeSecondsCountDownOver && !didMainTimerRun){ //3 Seconds Coundown is over, start main counter StartCountDownTimer(7000, 2); didMainTimerRun = true; isTimerRunning = false; } if(isMainCounterOver && !didRestTimerRun){ //Finally the Rest Round is Fired StartCountDownTimer(8000, 3); didThreeSecondsRun = true; isTimerRunning = false; } }
}//END of onCreate
//TimerType: 1. 3 SEC, 2. Main, 3. Rest public void StartCountDownTimer(int time, int whichTimerType){ new CountDownTimer(time, 1000) { @Override public void onTick(long millisUntilFinished) { // Used for formatting digits to be in 2 digits only NumberFormat f = new DecimalFormat("00"); long hour = (millisUntilFinished / 3600000) % 24; long min = (millisUntilFinished / 60000) % 60; long sec = (millisUntilFinished / 1000) % 60; textView.setText(f.format(hour) + ":" + f.format(min) + ":" + f.format(sec)); } @Override public void onFinish() { // When the task is over it will print 00:00:00 textView.setText("ZZZZZZZ"); if (whichTimerType == 1){ isThreeSecondsCountDownOver = false; } if (whichTimerType == 2){ isMainCounterOver = true; } if (whichTimerType == 3){ isMainCounterOver = false; }