为什么红绿灯不起作用

时间:2013-10-07 23:10:30

标签: android

我做了这个代码,想要打开和关闭几次红绿灯,然后停下来随机选择两个灯中的一个,但程序执行操作,但不会显示更改的灯,因为操作会

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);
}

}

1 个答案:

答案 0 :(得分:1)

你只睡了100毫秒,所以你可能没有看到灯光变化。将其更改为1000或甚至500,您可能会看到更改

Thread.sleep(1000);

另外,还有几个笔记

  1. 虽然使用此代码可能不是问题,但在UI Thread上睡觉通常不是一个好主意。使用Thread并使用UI更新runOnUiThread(),使用AsyncTaskHandler
  2. 不要将您的Button“按钮命名为”。将其命名为不是Android关键字的内容,例如buttonbtnstartButtonstartBtn或类似内容。
  3. 在区分Button被点击时,请使用Button id而不是Object。所以你想把它改成

     @Override
    public void onClick(View v) {   
    if (v.getId() == (R.id.start_button)) {
    
  4. 你也可以在这里使用switch声明但不重要。