我做了这个代码,想要打开和关闭几次红绿灯,然后停下来随机选择两个灯中的一个,但程序执行操作,但不会显示更改的灯,因为操作会
private ImageView redLight;
private ImageView greenLight;
private Button Button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.traffic_lights);
redLight = (ImageView) findViewById(R.id.red_light);
greenLight = (ImageView) findViewById(R.id.green_light);
Button = (Button) findViewById(R.id.start_button);
// Assign click listeners to buttons
Button.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (v == Button) {
int flag = 0;
for (int i = 0; i <= 100; i++) {
if (flag == 0) {
turnOnRedLight();
try {
Thread.sleep(100);
} catch (InterruptedException ex) {
Thread.currentThread().interrupt();
}
Log.i("Traffic", "Red");
flag = 1;
} else {
turnOnGreenLight();
try {
Thread.sleep(100);
} catch (InterruptedException ex) {
Thread.currentThread().interrupt();
}
Log.i("Traffic", "Green");
flag = 0;
}
}
}
}
private void turnOnRedLight() {
redLight.setImageResource(R.drawable.red_on);
}
private void turnOnGreenLight() {
greenLight.setImageResource(R.drawable.green_on);
}
}
答案 0 :(得分:1)
你只睡了100毫秒,所以你可能没有看到灯光变化。将其更改为1000或甚至500,您可能会看到更改
Thread.sleep(1000);
另外,还有几个笔记
UI Thread
上睡觉通常不是一个好主意。使用Thread
并使用UI
更新runOnUiThread()
,使用AsyncTask
或Handler
。Button
“按钮命名为”。将其命名为不是Android关键字的内容,例如button
,btn
,startButton
,startBtn
或类似内容。在区分Button
被点击时,请使用Button
id
而不是Object
。所以你想把它改成
@Override
public void onClick(View v) {
if (v.getId() == (R.id.start_button)) {
你也可以在这里使用switch
声明但不重要。