2017-11-01 3 views
0

여러 레벨을 포함하는 Android 기반 게임을 제작 중입니다.AsyncTask를 사용하여 무작위로 ImageView의 배경색을 변경하십시오.

레벨 1 ImageView를 빨간색에서 녹색으로 빠르게 임의의 간격으로 변경하려면 사용자가 녹색 점일 때 ImageView를 클릭해야합니다.

임의의 시간에 ImageView의 배경색을 임의로 변경하기 위해 별도의 클래스를 사용하여 AsyncTask를 실행하고 있습니다. 이 코드는 while 루프에 포함되어 있으며 levelPoints가 50에 도달하는지 확인합니다 (레벨 1 클래스의 OnClick 이벤트에 따라이 포인트가 올라갑니다).

다음은 문제입니다. - 배경색이 한 번 변경되고 while 루프 중에 변경되지 않습니다. Log.v를 사용하여 난수 및 수준 점의 상태를 확인했습니다.이 점은 루프가 정상적으로 작동하고 있음을 보여줍니다.

프로젝트는 WIP이지만이 섹션은 초록색을 50 회 클릭하여 루프를 끝내서 테스트 할 수있는 단계에 있어야한다고 생각했습니다. 그렇지 않다.

while 루프 중에 색상이 변경되지 않는 이유는 도움이됩니다. 비슷한 문제에 대해 StackOverflow 및 다른 사이트/포럼을 검색했으며 비슷한 자연을 찾을 수 없습니다. 여기

은 GitHub의에 해당하는 파일에 대한 링크입니다

당신이 postExecute 방법에서 UI에 아무것도를 업데이트해야 백그라운드 스레드에서 실행 doInBackground 방법에서 색상을 업데이트하기 때문에

https://github.com/CodeAddiction/Reactor

+0

보기를 다시 작성해야합니다. 값이 변경되었지만 UI에 다시 그려지고 반영되지 않았습니다. – Jimmy

+0

UI 스레드에서 ** invalidate() **를 사용하고 ** AsyncTask 클래스에서 ** postinvalidate() **를 사용합니까? – Stuey

+0

그 방법에 대해서는 잘 모르겠습니다. 하지만 asynctask에 콜백 메소드를 추가하여 메인 쓰레드에서 실행시킬 수 있습니다. 그런 다음 주 스레드에서 백그라운드를 업데이트 할 수 있습니다. – Jimmy

답변

0

또는 doinbackground 메서드에서 업데이트해야하는 경우 publishProgress 메서드 및 onProgressUpdate 메서드를 사용해야합니다.

postExecute, publishProgress, onProgressUpdate 메소드는 백그라운드 스레드에서 doInBackground 메소드가 실행되는 UI 스레드에서 실행됩니다.

doInBackground 메서드에서 아무것도 업데이트하려면 onProgressUpdate 메서드를 호출하는 doInBackground 메서드에서 publishProgress 메서드를 사용해야합니다.

+0

답장을 보내 주셔서 감사합니다 Abhilash, 게시물 Execute 메서드에서 while 루프 코드를 넣으면 화면이 회색으로 바뀌고 아무 일도 일어나지 않습니다. 내가 뭔가를 놓치고 있는지 말해 줄 수 있겠 니? – Stuey

관련 문제