2011-12-22 93 views
1

KeyboardView類在內部使用Canvas類,具體方法Canvas.DrawText機器人。該方法只能繪製一條線。我需要它畫兩條線。如何覆蓋內部使用的類的方法?

Java可能會以某種方式覆蓋Canvas.DrawText,這樣KeyboardView將使用覆蓋的方法?

有什麼方法來實現requried行爲無KeyboardView從頭開始全部重寫?

+0

你意味着[該類](http://www.devdaily.com/java/jwarehouse/android/core/java/android/inputmethodservice/KeyboardView.java.shtml)? – Yogu 2011-12-22 14:56:44

+0

是的,我的意思是那堂課。 – 2011-12-22 15:05:04

回答

1

如果在KeyboardView內部實際存在另一個Canvas實例,則必須直接擴展KeyboardView類。 (public class MyFancyKeyboardView extends KeyboardView

但是,它看起來像它有一個框架所調用的View.onDraw(Canvas)方法的實現,並提供了一個外部的Canvas。如果你能包你自己的View的裏面,你也許能夠提供自己onDraw調用了一個爲KeyboardView

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

(請記住,當然,每一個Android設備容易有一個完全不同的鍵盤佈局,所以我懷疑,在它是特別有效或便攜式繪圖...)

+0

關於你對鍵盤佈局的點評:KeyboardView類是用於定義了自己的佈局定製鍵盤類似的組件一個奇怪的內置。它與系統鍵盤無關。例如,它經常用於計算器應用程序。 – 2011-12-22 18:45:37

+0

Bah,對不起,我誤解了O :-)在任何情況下我都沒有惹過它。只是根據我的答覆,在班級的簽名和一般猜測... – BRFennPocock 2011-12-22 19:06:04

1

您將不得不重寫KeyboardView的方法,該方法使Canvas類實例化,以使其創建類的實例。

KeyboardView類中,只有方法onBufferDraw使用畫布,並且它也立即生效。很不好,這種方法非常大。

1

如果該類不提供一種方式來指定一個Canvas的子類,或者如果它不提供行爲擴展點,那麼沒有,但是:一個重寫不太可能是必要的,如果你瞄準特定的功能。

相反,子類的觀點,只有重新實現你需要改變的功能,並使用您的視圖子類。