我是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++;
}
}
}
但是,此代码不会自行更改背景,每次按下按钮都是必要的。如何确保当您按一次时,背景会自动更改?
答案 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上尝试此操作