2011-10-30 4 views
0

Android 용 첫 번째 앱을 개발 중입니다. 모든 것은 괜찮지 만 한 가지가있어서 머리를 감쌀 수 없습니다.안드로이드의 스레드에서 버튼 배경을 동적으로 변경합니다.

내 게임의 "기본"활동 (앱이 시작될 때 시작되는 첫 번째 활동이 아님)에서 버튼 배경색/이미지를 변경하는 스레드를 시작하는 메소드가 필요합니다. 아직 이미지를 만들지 못했습니다.). 나는 또한 이것을 n 번 수행하는 정수 매개 변수를 갖는 메소드를 사용하지 않을 것이다. changeButtons(5);처럼 전화를 걸 수 있고 1 초 동안 버튼 x 배경을 켜고 1 초를 5 번 기다립니다.

그래서 실제로 게임 중에 실행되는 "메인"스레드를 만들려고합니다. 특정 조건이 참일 때마다 (스레드를 호출하는 스레드)이 메서드를 실행할 것입니다.

그래서 두 가지 질문이 있습니다. 첫 번째는 "이것이 가능합니까?"입니다. 그렇다면 누군가가 나에게 어떻게 할 수 있는지 보여 줄 수 있습니다 (물론 모든 것이 아니라 적어도 시작하는 데 도움이됩니까?). 특히 스레드의 단추 배경색을 변경할 수 있는지 알고 싶습니다. 그렇다면 누군가가 저에게 스레드 작성 방법을 보여줄 수 있습니까?

두 번째 질문은 후속 작업입니다. 수행 할 수있는 경우 누군가가 버튼을 누르고 해당 변경 사항을 "알 수 있음"인 경우 boolean b과 같을 수 있습니까? 예를 들어 스레드가 실행 중이고 Obama가 x 버튼을 누르고 b가 OnClick(View v) 메소드에서 "true"로 바뀌면 내 주 Thead 내부에 if(b == true){Obama.moon();}이 있고 오바마가 달 것인가?

답변

4

물론 가능합니다.

android에서 Handler 클래스()를 사용하여 작업을 이벤트 대기열에 게시 할 수 있습니다. 당신이 뭔가를 할 수 있습니다

final Handler handler = new Handler(); 
final Runnable updateRunner = new Runnable() { 
    public void run() { 
     // we are now in the event handling so to speak, 
     // so go ahead and update gui, set color of button for instance 
    } 
}; 
new Thread(new Runnable() { 
    public void run() { 
     while (condition) { 
      SystemClock.sleep(1000); 
      handler.post(updateRunner); 
     } 
    } 
}).start(); 

이 각 초 updateRunner에서 run을 트리거합니다.


귀하의 후속 조치에 대해서는 물론 (물론 :) 할 수 있습니다.). 예를 들어 버튼 x를 처리하는 클래스에 대해 관찰 가능한 패턴을 구현할 수 있습니다. 누를 때 observers.updateChange(b) 과 같이 이전에 thatClassOverThere.registerObserver(this)이 메인 스레드에있는 것으로 관찰자에게 알립니다.

+0

패트릭에게 감사드립니다. 그러나 나는 아직도 약간 혼란 스럽다. 첫 번째 코드는 onCreate() 메서드에 넣어야합니까? 그것은 합리적인 것처럼 보이기 때문에 즉시 시작됩니다! 그리고 버튼은 XML로 선언되지만 findViewById()를 통해 내 코드의 객체이기도하므로 내 onClick (View v) 메소드에서 읽을 수 있습니다. 나는 아직도 관찰자를해야만합니까? 그리고 SystemClock.sleep (1000)을 사용할 때 버튼이 게임에서 여전히 작동합니까? 나가기 버튼처럼? –

+0

onCreate에 넣거나,'private void startUpdates() {...}'를 넣고 원할 때 호출 할 수 있습니다. 관찰자를 구현할 필요는 없지만 두 클래스가 있고 관찰자 패턴이 공용 get 메소드보다 유지 관리가 더 쉽다고 생각했습니다. 내가 마지막 질문을 이해하는지 모르겠다. 응용 프로그램을 끝내더라도 스레드가 계속 켜져 있다는 것을 의미합니까? – Patrick

+0

당신은 startUpdates()에 관해서 당신이 말하는 첫 번째 사실을 정말 빨리 보여줄 수 있습니까? 마지막 질문은 SystemClock.sleep (1000)을 많이 사용하고, 그 동안 사용자가 여전히 단추를 누를 수 있습니까? 예를 들어 this.finish()를 토글하는 exit 버튼처럼? –

관련 문제