繁体   English   中英

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

[英]Pause a loop with CountDownTimer methods until the methods are completed

我正在尝试通过循环一段代码来创建一个模拟交通灯的应用程序,该代码段在保持每种颜色一定时间后将 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();

我似乎无法让交通灯方法中的代码循环,因为我还没有找到一种方法来在后台更改周期完成之前暂停另一个循环迭代的开始。 换句话说,当我运行代码时,循环一直在 CountDownTimers 中调度任务; 它不安排,等待任务完成,然后重复。

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

简单地说,如何暂停循环直到 CountDownTimers 中的代码被执行?

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

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

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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM