减慢颜色序列代码

时间:2015-11-27 20:38:32

标签: java android

我目前正在创建一个显示随机颜色序列的记忆游戏,你必须将它们转发回来。它开始显示2然后在你正确的时候增加。我使用改变颜色的按钮,但我的问题是它们变化很快。我尝试过事件处理程序,但它并没有减慢屏幕上闪烁的颜色。我需要某种延迟。以下是点亮按钮的代码,具体取决于我的数组中放置了随机按钮ID。

 public void PlaySequence()
{
    for(int i = 0; i< yourList.size();i++)
    {
        switch(Integer.parseInt(yourList.get(i).toString())) {
            case 0:

                redButton.setBackgroundColor(Color.RED);
                revertButtonColour(0);
                break;
            case 1:
                blueButton.setBackgroundColor(Color.BLUE);
                revertButtonColour(1);
                break;

            case 2:
                greenButton.setBackgroundColor(Color.GREEN);
                revertButtonColour(2);
                break;
            case 3:
                yellowButton.setBackgroundColor(Color.YELLOW);
                revertButtonColour(3);
                break;
        }
    }

编辑:

我尝试添加事件处理程序,但它们似乎无法正常工作

public void revertButtonColour(int number)
{
    int slowThisDown = 0;
    while(slowThisDown < 5000)
        slowThisDown++;

    switch(number)
    {
        case 0:
            Handler redHandler = new Handler();
            redHandler.postDelayed(new Runnable() {
                public void run() {
                    redButton.setBackgroundResource(android.R.drawable.btn_default);
                }
            }, sequenceSpeed);
            break;
        case 1:
            Handler blueHandler = new Handler();
            blueHandler.postDelayed(new Runnable() { public void run() {
                blueButton.setBackgroundResource(android.R.drawable.btn_default);}}, sequenceSpeed);
            break;
        case 2:
            Handler greenHandler = new Handler();
            greenHandler.postDelayed(new Runnable() { public void run() {
                greenButton.setBackgroundResource(android.R.drawable.btn_default);}}, sequenceSpeed);
            break;
        case 3:
            Handler yellowHandler = new Handler();
            yellowHandler.postDelayed(new Runnable() { public void run() {
                yellowButton.setBackgroundResource(android.R.drawable.btn_default);}}, sequenceSpeed);
            break;
    }
}

1 个答案:

答案 0 :(得分:0)

您可以添加对

的调用

Thread.Sleep (time_between_changes)

但是这会弄乱UI线程。具有计时器的事件处理程序可能是要走的路。

编辑:

查找Timer类并在回调中,向UI线程发送消息,告诉它要更改哪个按钮。以下是如何让UI显示您想要的内容。

    public void PlaySequence()
    {
        for(int i = 0; i< yourList.size();i++)
        {
            switch(Integer.parseInt(yourList.get(i).toString())) {
                case 0:

                    redButton.setBackgroundColor(Color.RED);
                    Thread.Sleep (2000);
                    redButton.setBackgroundResource(android.R.drawable.btn_default);
                    break;
                case 1:
                    blueButton.setBackgroundColor(Color.BLUE);
                    Thread.Sleep (2000);
                    blueButton.setBackgroundResource(android.R.drawable.btn_default);
                    break;

                case 2:
                    greenButton.setBackgroundColor(Color.GREEN);
                    Thread.Sleep (2000);
                    greenButton.setBackgroundResource(android.R.drawable.btn_default);
                    break;
                case 3:
                    yellowButton.setBackgroundColor(Color.YELLOW);
                    Thread.Sleep (2000);
                    yellowButton.setBackgroundResource(android.R.drawable.btn_default);
                    break;
            }
            Thread.Sleep (500);
        }
    }