在Android中的CountDownTimer上暂停线程

时间:2017-06-21 06:15:17

标签: android multithreading imageview countdowntimer

屏幕上有四个球红色,蓝色,绿色,黄色,有两种状态 ON,OFF 。最初所有这些都处于 OFF 状态。我的要求是我有一个字符串假设 “RBYGRBYG” ,并且对于我想要更改的每个字母相应球的状态逐一 (R->RED,B->BLUE,Y->YELLOW,G->GREEN) 持续0.5秒。但我的playString("RBYGRBYG");代码同时改变了所有球的状态0.5秒,而不是一个一个地改变它。

private void playString(String str) {
    for(int i=0;i<str.length();i++)
    {
        if(str.charAt(i)=='R')
        {
            red.setImageResource(R.drawable.red_on);
            new CountDownTimer(500,100){
                @Override
                public void onTick(long millisUntilFinished) {

                }
                @Override
                public void onFinish() {
                    red.setImageResource(R.drawable.red_off);
                }
            }.start();
        }
        if(str.charAt(i)=='B')
        {
            blue.setImageResource(R.drawable.blue_on);
            new CountDownTimer(500,100){
                @Override
                public void onTick(long millisUntilFinished) {

                }
                @Override
                public void onFinish() {
                    blue.setImageResource(R.drawable.blue_off);
                }
            }.start();

        }
        if(str.charAt(i)=='G')
        {
            green.setImageResource(R.drawable.green_on);
            new CountDownTimer(500,100){
                @Override
                public void onTick(long millisUntilFinished) {

                }
                @Override
                public void onFinish() {
                    green.setImageResource(R.drawable.green_off);
                }
            }.start();

        }
        if(str.charAt(i)=='Y')
        {
            yellow.setImageResource(R.drawable.yellow_on);
            new CountDownTimer(500,100){
                @Override
                public void onTick(long millisUntilFinished) {

                }
                @Override
                public void onFinish() {
                    yellow.setImageResource(R.drawable.yellow_off);
                }
            }.start();

        }

    }
}

2 个答案:

答案 0 :(得分:1)

试试这个:

 private int i= 0; // class field

 private void playString(String str) {
     i++;
     if (i == str.length())
        i = 0;    
            if(str.charAt(i)=='R')  
    // the rest of the code the same removing one "}" at the end

答案 1 :(得分:1)

让我们看看我是否做对了: - 对于你的字符串上的每个字母,你想要改变球的状态(与字符串中的字符相对应)。

也许尝试一段时间而不是for,并且你只会在函数onFinish()中增加i ++,这样只有在前一个颜色已经停止的情况下才能获得下一个颜色。

编辑希望这会有所帮助:

private void playString(String str){
    while (i < str.length()){
        if(str.charAt(i)=='R'){
            red.setImageResource(R.drawable.red_on);
            new CountDownTimer(500,100){
            @Override
            public void onTick(long millisUntilFinished) {

            }
            @Override
            public void onFinish() {
                red.setImageResource(R.drawable.red_off);
                i+=1;
            }
        }.start();
            }
        }
}