2012-05-31 3 views
1

Android 용 Simon Says와 같은 것을 구현하려고합니다.Android : 패턴의 버튼 색상 변경

for(int i = 1; i <= sequence.size(); i++){ 
handler.postDelayed(new Runnable(){ 
        public void run(){ 
         if (sequence.peek() == 1){ 
          green.setPressed(true); 
          handler.postDelayed(new Runnable(){ 
           public void run(){ 
            green.setPressed(false);     
            } 
          }, 1000); 
         } 
         else if (sequence.peek() == 2){ 
          red.setPressed(true); 
          handler.postDelayed(new Runnable(){ 
           public void run(){ 
            red.setPressed(false);    
            } 
          }, 1000); 
         } 
         else if (sequence.peek() == 3){ 
          yellow.setPressed(true); 
          handler.postDelayed(new Runnable(){ 
           public void run(){ 
            yellow.setPressed(false);    
            } 
          }, 1000); 
         } 
         else if (sequence.peek() == 3){ 
          blue.setPressed(true); 
          handler.postDelayed(new Runnable(){ 
           public void run(){ 
            blue.setPressed(false);    
            } 
          }, 1000); 
         } 
         int myNum = sequence.peek(); 
         sequence.poll(); 
         sequence.add(myNum); 
        } 
       }, 1000); 
      } 
} 

는 기본적으로,이 큐 (순서)가 버튼의 색상을 깜박 패턴을 보유 : 이것은 내가 가지고있는 코드입니다. (setPressed (true)는 setPressed (false)와 다른 색상입니다. 처음으로 호출 할 때 제대로 작동하도록 색상을 변경해야하는 버튼이 하나뿐입니다. 두 번째 버튼을 호출하면 버튼 색상이 2 가지로 변경됩니다. 내 코드가 지금 동시에 둘 다 켜질 것입니다. 먼저 버튼 색상을 깜박이고 끝내고 두 번째 버튼 색상을 깜박 이도록하려면 어떻게합니까? 나는 수백만 가지를 시험해 보았는데, 이것은 아직도 내가 가졌던 가장 가까운 것입니다.

답변

0

for 루프로 인해 코드를 테스트하지 않고도 추측 할 수 있습니다. 기본적으로, 모든 시퀀스를 통과하며, 실행 파일은 1000 밀리 초의 지연으로 핸들러에 게시됩니다.

의미 : i는 0입니다. 시퀀스 1은 1000 밀리 초 단위로 시작됩니다. i는 1 : sequence1은 1000 밀리 초 단위로 시작됩니다. i는 2 ....

핸들러에 있기 때문에 for 루프의 런타임에는 영향을 미치지 않으므로 모든 반복이 서로에게 직접 전달되므로 모든 실행 가능 파일이 "거의" "같은 시간.

지연 시간을 (i + 1) * 1000으로 설정하면 각 "버튼"이 "자신의 시간"일 때 활성화됩니다 (1 초 동안).

+0

패턴이 색상을 반복 할 때를 제외하고는 작동합니다. 예를 들어 녹색으로 두 번 깜박이면 한 번 깜박입니다. 이것에 대한 아이디어가 있습니까? 고맙습니다! – Alice

+0

그게 아마 1000ms 동안 "깜빡"이기 때문에, 아마 "0ms"를 기다리고 1000ms 동안 다시 똑바로 깜박입니다. 지연을 1100 또는 1200으로 설정하거나 "깜박임 시간"을 줄이십시오. – damian