2011-09-28 3 views
0

클래스를 Button에 서브 클래 싱하고 onDraw() 메서드를 재정의했습니다. 그리고 그 버튼 텍스트로 값을 업데이트해야하는 변수를 업데이트하고있는 클래스의 생성자에 핸들러를 작성했습니다. 아래는 코드 스 니펫입니다.UI의 스레드 (또는) onDraw를 사용자 정의합니다.

public class CustomButton extends Button{ 



     CustomButton(){ 
       handler = new Handler(); 
       Runnable runObj = new Runnable(){ 
        public void run(){ 
         counter++; 
         handler.postDelayed(this,1000);     
        } 
       }; 
       handler.post(runObj); 
     } 

    @Override 
    protected void onDraw(Canvas canvas){ 
     super.onDraw(canvas);  
     setBackgroundResource(R.drawable.button9patch);  
     setTextColor(COMPONENTTEXTCOLOR); 
     setText(counter);  
    } 

    } 

버튼 텍스트가 업데이트됩니다. 단추가 처음에 렌더링 될 때 및 레이블이나 이미지 등을 설정하는 것과 같은 단추보기에 대한 수정을 할 때 onDraw() 메서드가 호출된다는 것을 알고 있습니다.

여기 내 코드에서 onDraw() 메서드 외부에서 카운터를 업데이트하지만 onTraw() 메서드에서 setText (counter)를 명시 적으로 호출합니다. Hanlder 코드에서 setText (counter)를 호출하지 않을 때 버튼 텍스트를 주기적으로 업데이트하는 방법은 무엇입니까?

카운터 변수를 변경하는 UI 스레드가 정기적으로 단추로 업데이트 되었습니까?

혼란 스럽습니다.

감사

+0

질문 형식을 업데이트하십시오. 하단의 텍스트는 그렇게 읽기가 어렵습니다. – Knickedi

답변

1

당신은 결코 처음으로 핸들러를 시작하지 않습니다.

handler.postDelayed(runObj,1000);   

업데이트 :

당신은 당신이 자신을 다시 그리기 버튼을 강제해야 카운터를 업데이트 할 때마다 :

counter++; 
CustomButton.this.postInvalidate(); 
+0

편집 및 응답 주셔서 감사합니다. 실제로 샘플 코드를 사용하여 내 질문에 대한 설명을 시도했습니다. 나는 그것을 서둘러 추가하는 것을 잊었다 :-). 나는 그것을 지금 추가했다. – droidsites

+0

하지만이 변경 내 질문에 대답하지 않았다 – droidsites

+0

답변을 –