我对此并不太清楚,文档也是如此。
当我创建自定义视图时,我会像这样覆盖:
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
//more code here...
}
我的问题是是否需要调用super.onDraw(canvas);
。在没有它的情况下代码似乎可以正常工作,但我想确保可以将其省略。
那么这是必要的吗?
我对此并不太清楚,文档也是如此。
当我创建自定义视图时,我会像这样覆盖:
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
//more code here...
}
我的问题是是否需要调用super.onDraw(canvas);
。在没有它的情况下代码似乎可以正常工作,但我想确保可以将其省略。
那么这是必要的吗?
如果你想调用父类的onDraw方法(比如TextView或KeyboardView,而不是通用的View),那么调用super.onDraw。如果你不想这样做,即你计划自己绘制整个View(这似乎是你的意图),那么没有必要调用它。
另外,如果你扩展的是View(而不是某个扩展了View的类),那么调用super.onDraw实际上并没有什么作用。
对于我来说,当我想在KeyboardView上绘制线条时,我会调用super.onDraw。因此,super.onDraw绘制了键盘,而我自定义的LatinKeyboardView(扩展了KeyboardView)在键盘上方绘制了滑动路径。
View.onDraw()
是一个空方法。因此,如果父类是View
本身,则调用super.onDraw()
不起任何作用。这是不必要的但无害的。是的,它确实是这样的。如果你定制了一个TextView,super.onDraw将确保绘制任何属于TextView属性的内容(如文本、文本颜色、文本阴影等)。其他视图,如按钮、复选框等也是同样的。
如果你的自定义视图扩展了View(不是View的特定子类,只是View),最好还是在某些View的绘制方法(如setBackgroundDrawable等)中保留super.onDraw(canvas)。
除非您实际上要覆盖 onDraw()
方法,否则不需要这样做。如果新类没有覆盖它,那么超类的方法将自动被调用。
super.onDraw()
。如果您不依赖于自定义View
的超类所做的绘图(例如,所有必需的绘图都在本地覆盖的方法中完成),则不需要调用它,除非文档明确说明需要调用。 - MH.