使用 CountDownTimer 方法暂停循环,直到方法完成



我正在尝试创建一个模仿红绿灯的应用程序,方法是循环一段代码,在按住每种颜色一段时间后将 TextView 的背景从红色切换到黄色再到绿色。用户将能够通过按下按钮来开始和结束循环。我已经使用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 方法中的代码循环,因为我还没有找到在后台更改周期完成之前暂停另一个循环迭代开始的方法。换句话说,当我运行代码时,循环会不断在倒计时计时器中调度任务;它不计划,等待任务完成,然后重复。

我尝试解决这个问题的最佳尝试包括在 signalSwitcher 方法的末尾使用另一个 do-while 循环,重新检查参数,直到最后一个 signalSwitcher 方法提供退出该循环所需的输入。但是,此方法似乎不起作用,因为当我尝试运行该应用程序时,我会出现空白屏幕。

简单地说,在执行 CountDownTimers 中的代码之前,如何暂停循环?

我认为没有直接的 api 可以暂停和恢复计时器。但是您可以取消它,然后记录剩余时间。使用剩余时间重新创建计时器。

而不是 for 循环,而是在 CountDownTimer onTick(( 方法中进行更改。尝试使用此代码。

public void trafficLight() {
lightDisplay.setBackgroundColor(Color.RED);        
signalSwitcher(9000);
}

public void signalSwitcher(long delayTime) {
new CountDownTimer(delayTime, 1000) {
@Override
public void onTick(long millisUntilFinished) {
if(millisUntilFinished == 3000)
lightDisplay.setBackgroundColor(Color.YELLOW);
else if(millisUntilFinished == 6000)
lightDisplay.setBackgroundColor(Color.GREEN);
}
@Override
public void onFinish() {
lightDisplay.setBackgroundColor(Color.RED);
}
}.start();