-2

我做了这段代码,想多次打开和关闭一个红绿灯,然后停下来随机选择两个灯中的一个,但是程序做了操作,但没有像操作那样显示变化的灯

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

}

4

1 回答 1

1

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

Thread.sleep(1000);

此外,还有一些注意事项

  1. 尽管使用此代码可能不是问题,但UI Thread通常睡在上面并不是一个好主意。使用 aThreadUI使用runOnUiThread()、 使用AsyncTask或更新Handler
  2. 不要命名你的Button“按钮”。将其命名为不是 Android 关键字的名称,例如button, btn, startButton, startBtn, 或类似名称。
  3. 当区分哪个Button被点击时,使用Button id代替Object。所以你想把它改成

     @Override
    public void onClick(View v) {   
    if (v.getId() == (R.id.start_button)) {
    

你也可以switch在这里使用一个声明,但并不重要。

于 2013-10-08T00:05:22.013 回答