2012-11-05 3 views
1

알고리즘을 진행하는 방식을 시각적으로 표현한 고전적인 flood fill 알고리즘을 실행하고 싶습니다. 즉 검정색으로 바뀌는 일련의 버튼은 알고리즘의 순서를 나타냅니다. 재귀 알고리즘의 반복 버전을 생성하여 속임수를 쓰고 싶지는 않습니다. oorly 탭 의사 앞서 P : 알고리즘이 버튼은 알고리즘의 끝에서 한 번에 색상을 변경 실행 있지만안드로이드 업데이트 ui에서 재귀 알고리즘

public void floodFill(int x, int y, String targetColor,String replacementColor) { 
      if *out of bounds* return 
       else 
       if button = target then return 
       else 
       Switchbuttontoblack(button); 
       PAUSE; 
     floodFill(x - 1, y, targetColor, replacementColor); 
     floodFill(x + 1, y, targetColor, replacementColor); 
     floodFill(x, y - 1, targetColor, replacementColor); 
     floodFill(x, y + 1, targetColor, replacementColor); 
} 

하지만.

Android timer updating a textview (UI)과 같은 UI가 아닌 스레드가 원인 일 수 있습니다.

그러므로 I)이 (즉
handler.post (하는 Runnable algoithm의 PAUSE 라인에서 실행 가능한 구현].

실행 가능하다

private Runnable runnable = new Runnable() { 
     public void run() { 

      Log.d("RUNableworking","RUNableworking"); 
      handler.postDelayed(this, 1000); 

     } 
    }; 

플러드 필 스레드 = 무에서 실행 러닝 onCreate에서 로그를 볼 수 있습니다.

실행 가능한 폴링에 너무 열중하지 않으므로 더 나은 방법이 있어야합니다.

답변

1

매우 편리한 runOnUiThread()라는 명령이 있습니다. 유일한 문제는 실행중인 UI가 대기열에 있다는 것입니다. 또한 Handler 개체를 사용하여 UI 업데이트 호출을 UI 스레드로 보낼 수도 있습니다.

그러나 단계별로 진행한다면 다른 스레드를 사용해야합니까?

업데이트 : onDraw()에서 홍수 채우기를 수행하고 있습니까? 그렇다면 단계별로 진행되지 않습니다.

+0

TBH, 스레드가 문제를 복잡하게 만듭니다. 하지만 바닐라 함수를 사용하면 (위와 같이) 실행이 끝날 때까지 UI를 업데이트하지 않는 것처럼 보입니다. 명시 적으로 새 스레드를 만들지는 않지만 문제가 발생한다고 가정합니다. – stevenpcurtis

+0

아니요, onDraw()를 사용하지 않습니다. 그냥 배경색을 설정 switchbutt.setBackgroundColor (Color.BLACK); – stevenpcurtis

+0

오! 나는 잘못 읽었다. 나는 당신이 픽셀 플로팅을 사용하고 있다고 생각했지만 버튼은 사용하지 않았습니다. 단추를 무효화하여 업데이트되도록해야하는 경우가 있습니다. Android가 BG 변경 요청을 대기 행렬에 넣고 한 번에 하나씩 전달하는 대신 이 단계를 위해 각 패스마다 일종의 타이머 메커니즘을 수행하거나 반복 플리퍼 버튼을 원한다. –

관련 문제