Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何重写内部使用的类的方法?_Java_Android - Fatal编程技术网

Java 如何重写内部使用的类的方法?

Java 如何重写内部使用的类的方法?,java,android,Java,Android,Android中有classKeyboardView,它内部使用classCanvas,特别是方法Canvas.DrawText。这种方法只能画一条线。我需要它来画两条线 在Java中,有可能以某种方式覆盖Canvas.DrawText,以便键盘视图将使用覆盖方法 是否有任何方法可以实现所需的行为,而无需从头完全重写KeyboardView?您必须重写实例化Canvas类的KeyboardView方法,使其创建类的实例 在KeyboardView类中,只有方法onBufferDraw使用画布,并

Android中有class
KeyboardView
,它内部使用class
Canvas
,特别是方法
Canvas.DrawText
。这种方法只能画一条线。我需要它来画两条线

在Java中,有可能以某种方式覆盖Canvas.DrawText,以便
键盘视图
将使用覆盖方法


是否有任何方法可以实现所需的行为,而无需从头完全重写
KeyboardView

您必须重写实例化
Canvas
类的
KeyboardView
方法,使其创建类的实例


KeyboardView
类中,只有方法
onBufferDraw
使用画布,并且它也实例化画布。糟糕的是,这个方法非常大。

如果类没有提供指定画布子类的方法,或者如果它没有提供行为扩展点,那么就没有了,但是:如果您针对的是特定的功能,则不可能需要完全重写


相反,对视图进行子类化,只重新实现需要更改的功能,并使用视图子类。

如果
KeyboardView
中实际上还有另一个
Canvas
实例,则必须直接扩展
KeyboardView
类。(
公共类MyFancyKeyboardView扩展了KeyboardView

但是,它似乎有一个
View.onDraw(Canvas)
方法的实现,该方法由框架调用,并提供了一个外部
Canvas
。如果您可以将其封装在自己的
视图中,您可能可以提供自己的
onDraw
,该视图调用了
键盘视图的视图

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

(当然,请记住,每个安卓设备都可能有完全不同的键盘布局,因此我怀疑它是否特别有效或便携……)

您的意思是什么?关于您对键盘布局的评论:KeyboardView类是一个奇怪的内置类,用于定义自己布局的自定义类键盘组件。它与系统键盘无关。例如,它经常用于计算器应用程序。呸,对不起,我误解了O:-)我没有在任何上下文中处理它。我的回答是基于全班同学的签名和一般猜测…