1

私はGridLayoutそれにいくつかのボタンを持っています。

各ボタンの色を順番に、たとえば 3 秒ごとに変更する必要があります。

ここで問題が発生しています...私のコードを見てください:

runnableScan = new Runnable() {
    @Override
    public void run() {
        GridLayout view = Grid;
        for ( int i = 0; i < view.getChildCount(); i++) {
            Button btn = (Button)view.getChildAt(i);
            btn.setBackgroundColor(Color.RED);
            handlerScan.postDelayed(this, 3000);                                        
        }
    }
};      
handlerScan.postDelayed(runnableScan, 3000);      

まあ..すべてのボタンの色を赤に変更しますが、一度にすべて変更します!!!

3 秒ごとに 1 つのボタンで順番に色を変更したかったのです。

Toastそこに a を入れるToastと、各ボタンのインデックスで 3 秒ごとに が発射されます。

私が間違っていることは何ですか?すべてのボタンが一度に赤に変わるのはなぜですか??

4

1 に答える 1

0

ランナブルのメソッドはまだすべてrun()のボタンをループしており、への 1 回の呼び出しですべてのボタンの色を変更しています。 run()

この行:

  handlerScan.postDelayed(this, 3000);                                        

ループの反復間に遅延を追加しません。3 秒後に再度呼び出されるようにforスケジュールするだけです。run()これを試してください(for loop なしで)。

  runnableScan = new Runnable() {
     @Override
     public void run() {

        GridLayout view = Grid;
        Button btn = (Button)view.getChildAt(buttonIndex++);
        if (btn != null) {
           btn.setBackgroundColor(Color.RED);
           handlerScan.postDelayed(this, 3000);
        }
     }
  };
  handlerScan.postDelayed(runnableScan, 3000);

buttonIndexクラスのメンバー変数として追跡する必要があります。

private int buttonIndex;

次に、最初のボタンのインデックスに初期化します。たとえば、 でコンテンツ ビューを設定する場合はonCreate()、次を使用します。

   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.some_layout_name);

      GridLayout view = Grid;
      for (buttonIndex = 0; buttonIndex < view.getChildCount(); buttonIndex++) {
         View v = view.getChildAt(buttonIndex);
         if (v instanceof Button) {
            // we found the first button, so stop looping
            break;
         }
      }

      handlerScan = new Handler();

お見せしたコードは、ボタン 1 の色を赤に変更し、3 秒後にボタン 2 を赤に変更し、3 秒後にボタン 3 を赤に変更します。プロセスを最初からやり直す場合はbuttonIndex、ボタン 3 の変更が完了した後、最初のボタンのインデックスにリセットするだけです。

于 2013-05-27T03:38:42.047 に答える