Я пытаюсь создать приложение, которое имитирует трафик c, зацикливая сегмент кода, который переключает фон TextView с красного на желтый и зеленый после удержания каждого цвета в течение определенного промежутка времени. Пользователь сможет запустить и завершить l oop, нажав кнопку. Я использовал CountDownTimers, чтобы удерживать каждый фон TextView в течение определенного промежутка времени, и этот метод работает нормально. Текущее состояние моего кода выглядит следующим образом:
public void trafficLight() {
lightDisplay.setBackgroundColor(Color.RED);
// Temporary for loop, a do-while loop causes the app to crash
for (int x = 2; x <= 4; x++) {
signalSwitcher(3000, Color.YELLOW);
signalSwitcher(6000, Color.GREEN);
signalSwitcher(9000, Color.RED);
}
}
public void signalSwitcher(long delayTime, final int signalColor) {
new CountDownTimer(delayTime, 1000) {
@Override
public void onTick(long millisUntilFinished) {
}
@Override
public void onFinish() {
lightDisplay.setBackgroundColor(signalColor);
}
}.start();
Кажется, я не могу получить код в методе trafficLight равным l oop, поскольку я не нашел способа приостановить запуск другой итерации l oop до завершения цикла смены фона. Другими словами, когда я запускаю код, l oop продолжает планировать задачи в CountDownTimers; оно не запланировано, дождитесь завершения задач и повторите.
Моя лучшая попытка решить эту проблему состояла в том, чтобы сделать еще один do-while l oop в конце методов signalSwitcher, которые проверяет параметр до тех пор, пока последний метод signalSwitcher не предоставит вход, необходимый для выхода из этого l oop. Тем не менее, кажется, что этот метод не работает, так как я получаю пустой экран при попытке запустить приложение.
Проще говоря, как вы можете приостановить oop, пока не будет выполнен код в CountDownTimers?