2012-01-07 2 views
2

나는 증가하는 동안 소리를 내고 단추의 배경색을 변경하는 루프가 있습니다. 사운드는 작동하지만 포터 듀프 모드를 사용하는 배경색은 루프가 완료 될 때까지 변경되지 않습니다. 카운터가 증가 할 때마다 각 버튼 색상을 변경하고 싶습니다.지연 색상 필터 세트

어떤 아이디어가 있습니까? 의 setColorFilter의 소리를 느리게하는

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를 (지연) 작동하지만 나던 업무 단지 루프의 끝에서 모든 버튼을 업데이트 : 여기 는 내 코드의 조각이다 thx

답변

0

첫 번째 위치에 버튼 [i]가 있습니까? 먼저 레이아웃 (상위)을 가져 와서 getChildCount() 및 getChildAt()를 사용하여 통과 한 다음 원하는 위치에 색상을 적용 할 수 있습니다. 버튼

1

주 threa에서 차단 작업을 수행해서는 안됩니다 d

이 코드는 백그라운드 스레드에서 실행하고 주 스레드에서는 UI 수정 만 수행해야합니다. AsyncTask, Handler, runOnUiThreadTimerTask으로 달성 할 수 있습니다.

painless threading이라는 이유와 사용법을 설명하는 훌륭한 기사가 있는데, 나는 그것을 읽는 것이 좋습니다. 에 의해 조언대로 (백그라운드 스레드에서 반복되는 경우

0

어쩌면 당신이 그것을 다시 그려야 할 필요가 시스템을 경고하기 위해 귀하의 의견에 .invalidate() 전화를 시도해야

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

을 (여기 documentation 참조) 그의 답변에 MByD, 그리고 분명히 동의) 대신 .postInvalidate() (여기에 documentation입니다)를 호출 해 볼 수 있습니다.