2012-01-07 8 views
2

私は、音を出し、それぞれの間にボタンの背景色を変更するループを持っています 増分。サウンドは機能しますが、ループが完了するまで、ポッターデュプレックスモードを使用する背景色は変化しません。カウンターの増分に合わせて各ボタンの色を変更したい。設定されたカラーフィルターを持つ遅延

ここ は、私のコードの抜粋です:

for (int i=1;i <= cupvalue; i++) { 
      if (soundvalue) { mSoundManager.playSound(1); } 
      buttons[i].getBackground().setColorFilter(0xFFff0000, PorterDuff.Mode.MULTIPLY); //red 
      beadcount--; 

      try { 
       Thread.sleep(delay); // delay sounds for each drop 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

「のThread.sleep(遅延)はちょうどループの最後にすべてのボタンを更新し、setColorFilterのためのサウンドが、doesntの仕事を遅くするために、働きます thx

答えて

0

最初にボタン[i]が存在するのですか?最初にレイアウト(親)を取得してからgetChildCount()およびgetChildAt()を使用してそれを走査し、ボタン

1

メインスレッドではブロック操作を実行しないでくださいd

このコードをバックグラウンドスレッドで実行し、メインスレッドでのみUIの変更を実行する必要があります。 AsyncTaskHandlerrunOnUiThreadTimerTaskで達成できます。

painless threadingと呼ばれる理由と使用方法を説明する素晴らしい記事がありますが、これはお読みになることをおすすめします。の助言として、あなたは(バックグラウンドスレッドでループしている場合

0

たぶん、あなたはそれを再描画する必要のあるシステムに警告するためにあなたの意見に.invalidate()を呼び出すようにしてください

... 
buttons[i].getBackground().setColorFilter(0xFFff0000, PorterDuff.Mode.MULTIPLY); 
buttons[i].invalidate() 
... 

を(ここではdocumentation参照)彼の答えでMByD、私は確かに同意する).postInvalidate()(代わりにdocumentation)を呼び出すことを試みることができる。

関連する問題