我正在尝试通过循环一段代码来模拟交通信号灯,该代码段在将每种颜色保持一定时间后将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方法中使代码循环,因为我还没有找到在后台更改周期完成之前暂停另一个循环迭代的开始的方法。换句话说,当我运行代码时,循环会继续在CountDownTimers中安排任务;它没有计划,请等待任务完成,然后重复。
我试图解决此问题的最佳尝试包括在signalSwitcher方法的末尾有另一个do-while循环,该循环会重新检查参数,直到最后一个signalSwitcher方法提供退出该循环所需的输入为止。但是,由于尝试运行应用程序时出现空白屏幕,因此该方法似乎不起作用。
简单地说,如何在执行CountDownTimers内部的代码之前暂停循环?
我认为没有直接的api可以暂停和恢复计时器。但是您可以取消它,然后记录剩余时间。用剩余时间重新创建一个计时器。
而不是for循环,请在CountDownTimer onTick()方法中进行更改。尝试使用此代码。