2011-12-22 6 views
1

내부 클래스 Canvas 및 특히 Canvas.DrawText을 사용하는 Android에는 클래스 KeyboardView이 있습니다. 이 방법은 한 줄만 그릴 수 있습니다. 두 줄을 그려야합니다.내부적으로 사용되는 클래스의 메서드를 재정의하는 방법은 무엇입니까?

Java에서 어쨌든 Canvas.DrawText을 덮어 쓸 수 있으므로 KeyboardView은 덮어 쓰기 된 메서드를 사용합니까?

KeyboardView을 처음부터 완전히 다시 쓰지 않으면 requried 동작을 얻을 수있는 방법이 있습니까?

+0

당신을 수행 의미 [이 클래스] (http://www.devdaily.com/java/jwarehouse/android/core/java/android/inputmethodservice/KeyboardView.java.shtml)? – Yogu

+0

예, 그 수업을 의미합니다. –

답변

1

실제로 Canvas 인스턴스가 KeyboardView 인 경우 클래스를 직접 확장해야합니다. (public class MyFancyKeyboardView extends KeyboardView)

그러나 Canvas이 제공된 프레임 워크에서 호출되는 View.onDraw(Canvas) 메서드 구현이있는 것 같습니다. 자신의 View 안에 넣을 수 있다면 KeyboardView에 대해 자신의 onDraw이라는 것을 제공 할 수 있습니다.

 private KeyboardView wrappedKeyboardView; 
    public void onDraw (Canvas canvas) { 
     wrappedKeyboardView.onDraw (canvas); 
     doMoreDrawing (canvas); 
    } 

(모든 안드로이드 장치가 완전히 다른 키보드 레이아웃을 가지고 책임이 있음을 물론, 명심, 그래서 그것이 특히 효과적 또는 휴대용되는 동안 그림에 대한 의심 해요 ...)

+0

키보드 레이아웃에 대한 의견 : KeyboardView 클래스는 자체 레이아웃을 정의하는 사용자 정의 키보드와 같은 구성 요소에 사용되는 이상한 내장입니다. 시스템 키보드와 아무 관련이 없습니다. 예를 들어 계산기 응용 프로그램에 자주 사용됩니다. –

+0

바하마, 미안, 나는 오해가 있었다. 나는 어떤 상황에서도 그것을 어지럽히 지 않았다. 내 대답을 수업의 서명 및 일반적인 추측에 기반 ... – BRFennPocock

1

KeyboardView의 메서드를 재정의해야 Canvas 클래스를 인스턴스화하여 클래스의 인스턴스를 만들 수 있습니다.

KeyboardView 클래스의 경우 onBufferDraw 메서드 만 캔버스를 사용하며 인스턴스화합니다. 불쌍하게도이 방법은 매우 큽니다.

1

클래스가 캔버스 하위 클래스를 지정하는 방법을 제공하지 않거나 비헤이비어 확장 점을 제공하지 않는 경우, 아니요, A전체 다시 쓰는 것이 필요하지 않을 수 있습니다. 특정 기능을 목표로합니다.

대신 뷰를 서브 클래스 화하고 변경해야하는 기능 만 다시 구현하고 뷰 하위 클래스를 사용하십시오.

관련 문제