2012-01-07 4 views
2

사용자 정의보기를 작성하여 xml 파일의 제 레이아웃에 추가했습니다. 클릭 이벤트를 사용하여 사용자 지정보기를 새로 고치려고하지만 다른 클래스에서 onDraw 메서드를 호출하는 방법을 알 수 없습니다. invalidate 및 postInvalidate가 사용자 정의보기를 새로 고치지 않습니다.다른 클래스에서 onDraw를 호출하려면 어떻게해야합니까?

답변

4

뷰 내부에서 변경 사항을 호출하고 무효화를 호출하는 메서드를 만들어야합니다.

public void setTextSize (int size) { 
     mTextSize = size; 
     invalidate(); 
} 

완벽하게 작동합니다.

0

확실히 View.invalidate()를 호출해야합니다. 보기가 표시되고 측정 크기가 있는지 확인합니다. 즉,보기 getMeasuerdWidth() 및 getMeasuerdHeight()이> 0을 반환하는지 확인합니다.

ondraw 메서드의 시작 부분에 로그 메시지를 넣어 작동하는지 확인하십시오. 확실히 invalidate()되어야합니다. 데이터가 변경되지 않았을 가능성이 있습니까?

0

onDraw() 메서드 호출 결과를 무효화합니다.

다른 클래스에서 customViewClassName.invalidate()를 호출하면 onDraw() 메서드가 호출됩니다.

0

이러한 메커니즘을 달성하기 위해 메시지 처리기를 사용합니다. 사용자 정의 View 클래스에서 Handler을 만든 다음이 핸들러에 대한 참조를 버튼 (예 : Activity의 onCreate 이벤트)에 전달한 다음 sendMessage()/handleMessage() 메커니즘을 사용하여 Button과 다른보기.

이 방법을 사용하면 필요한 경우 다른 모든 구성 요소가 사용자 정의보기와 잘 상호 작용할 수 있습니다.

+0

사용자 지정보기에서 내 활동 클래스로 어떤 메시지를 보내야합니까? 겉으로는 무효화 또는 캔버스를 보낼 수 없습니다. – user1134179

관련 문제