在Thread中的`for`里面做东西

时间:2016-08-16 09:53:44

标签: java android

@Override

    public void run() {

        act.runOnUiThread(new Runnable() {

            @Override

            public void run() {

                for (int i = 0; i < randomNumber.size(); i++) {

                    Log.d("N",randomNumber.get(i).toString());

                    if (randomNumber.get(i).intValue() == 1) imgColor.setBackgroundColor(Color.RED);
                    if (randomNumber.get(i).intValue() == 2) imgColor.setBackgroundColor(Color.GREEN);
                    if (randomNumber.get(i).intValue() == 3) imgColor.setBackgroundColor(Color.BLUE);
                    if (randomNumber.get(i).intValue() == 4) imgColor.setBackgroundColor(Color.YELLOW);

                    try {
                        Thread.sleep(1750);
                    } catch (Exception e) {
                        Thread.currentThread().interrupt();
                    }

                    imgColor.setBackgroundColor(Color.BLACK);

                    try {
                        Thread.sleep(400);
                    } catch (Exception e) {
                        Thread.currentThread().interrupt();
                    }

                }

                Toast.makeText(act, "Ripeti la sequenza", Toast.LENGTH_SHORT).show();
            }
        });
    }

我有一个数字列表,数字从1到4.我想根据列表中的数字来描绘ImageView,但我需要一系列颜色,所以我需要(例如)显示RED颜色,等待1,75秒后,以及绿色等等,但它不起作用!我该怎么办?

1 个答案:

答案 0 :(得分:0)

对于此类任务,线程不是最佳选择。我建议你使用View.postDelayed方法。所以你应该得到类似的东西。

void setRandomColor(){
   if(!hasRandomColor())
      return;

   imgColor.setBackgroundColor(getRandomColor());

   imgColor.postDelayed(new Runnable(){ 
     void run(){
        setRandomColor();
     }
   }, 1750); // update color again after 1.75 sec
}

... 

setRandomColor();