循环不会自动运行

时间:2016-07-04 08:26:54

标签: java android

我是Android新手。我的程序模拟交通信号灯的操作,并根据已经过的秒数显示适当的颜色。点击buttonRandom从0到6秒显示绿色背景,从6到7秒显示黄色背景,从7到9秒显示红色背景。

public void onClick(View v) {
    switch (v.getId()) {
        case R.id.buttonRed:
            mTextView.setText(R.string.buttonRed);
            mRelativeLayout.setBackgroundColor(getResources().getColor(R.color.colorRed));
            break;
        case R.id.buttonYellow:
            mTextView.setText(R.string.buttonYellow);
            mRelativeLayout.setBackgroundColor(getResources().getColor(R.color.colorYellow));
            break;
        case R.id.buttonRandom:
            int count = 0;
            while (count <= 10) {
                Date date = new Date();
                int sec = date.getSeconds();
                if (sec % 10 >= 0 && sec % 10 < 6) {
                    mTextView.setText(R.string.buttonGreen);
                    mRelativeLayout.setBackgroundColor(getResources().getColor(R.color.colorGreen));
                    count++;
                }
                else if (sec % 10 >= 6 && sec % 10 < 7) {
                    mTextView.setText(R.string.buttonYellow);
                    mRelativeLayout.setBackgroundColor(getResources().getColor(R.color.colorYellow));
                    count++;
                }
                else if (sec % 10 >= 7 && sec % 10 < 9) {
                    mTextView.setText(R.string.buttonRed);
                    mRelativeLayout.setBackgroundColor(getResources().getColor(R.color.colorRed));
                    count++;
                }
            }
    }

但是,此代码不会自行更改背景,每次按下按钮都是必要的。如何确保当您按一次时,背景会自动更改?

3 个答案:

答案 0 :(得分:1)

  

但是,此代码不会自行更改背景,每次按下按钮都是必要的。

那是因为你的while循环运行得如此之快,在第二次循环之前已经完成了10次循环。你想在这里使用处理程序或其他东西每秒进行一次检查

int sec = 0;
case R.id.buttonRandom:
    final Handler h = new Handler();
    h.postDelayed(new Runnable() {
        @Override
        public void run() {
            if (sec % 10 >= 0 && sec % 10 < 6) {
                mTextView.setText(R.string.buttonGreen);
                mRelativeLayout.setBackgroundColor(getResources().getColor(R.color.colorGreen));
            } else if (sec % 10 >= 6 && sec % 10 < 7) {
                mTextView.setText(R.string.buttonYellow);
                mRelativeLayout.setBackgroundColor(getResources().getColor(R.color.colorYellow));
            } else if (sec % 10 >= 7 && sec % 10 < 9) {
                mTextView.setText(R.string.buttonRed);
                mRelativeLayout.setBackgroundColor(getResources().getColor(R.color.colorRed));
            }

            sec++;
            if (sec < 11) {
                h.postDelayed(this);
            }
        }
    }, 1000);

答案 1 :(得分:0)

当您点击按钮时,您所做的只是一次性动作,它不会听到时间变化。

Here你有一个与计时器合作的教程。通过它,它将教你如何使用计时器,之后,只需根据您的需要进行调整(例如更改颜色而不是文本)。

答案 2 :(得分:0)

private long timeInMilliseconds = 0L;
private long updatedTime = 0L;
private long startTime = 0L;
//thread for 5 sec
private Runnable updateTimerThread = new Runnable() {
    public void run() {

        timeInMilliseconds = SystemClock.uptimeMillis() - startTime;

        updatedTime = timeInMilliseconds;

        int secs = (int) (updatedTime / 1000);
        secs = secs % 60;

        if (secs % 10 >= 0 && secs % 10 < 6) {
            mTextView.setText(R.string.buttonGreen);
            mRelativeLayout.setBackgroundColor(getResources().getColor(R.color.colorGreen));
            count++;
        } else if (sec % 10 >= 6 && sec % 10 < 7) {

            mTextView.setText(R.string.buttonYellow);
            mRelativeLayout.setBackgroundColor(getResources().getColor(R.color.colorYellow));
            count++;

        }


    else if(sec%10>=7&&sec%10<9)

    {
        mTextView.setText(R.string.buttonRed);
        mRelativeLayout.setBackgroundColor(getResources().getColor(R.color.colorRed));
        count++;
    }
}
};

在按钮clcik上尝试此操作