我不太清楚这一点,文档也不是。
当我创建自定义视图时,我会这样覆盖:
@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 而不是通用视图),那么调用 super.onDraw。如果您不希望这样,即您计划自己绘制整个视图(您似乎是这样),则没有理由调用它。
此外,如果您正在扩展 View(而不是扩展视图的某个类), super.onDraw 并没有真正做任何事情。
对我来说,当我想在 KeyboardView 上画线时,我会调用 super.onDraw。因此,super.onDraw 绘制了键盘,而我的自定义 LatinKeyboardView(它扩展了 KeyboardView)在键盘顶部绘制了滑动路径。
查看源代码表明这View.onDraw()
是一个空方法。super.onDraw()
因此,如果父类本身就是调用,则View
什么也不做。这是不必要但无害的。
无论如何,你是否应该继续这样做是效率、安全和风格的单独问题。
是的。如果您自定义一个 TextView,super.onDraw 将确保绘制属于 TextView 属性的任何内容(如文本、文本颜色、文本阴影等...)与其他视图(如 Button、CheckBox...)相同
如果您的自定义视图扩展视图(不是视图的特定子类,只是视图),最好将 super.onDraw(canvas) 留在那里以用于某些视图的绘制方法(如 setBackgroundDrawable 等...)
除非您实际上覆盖了该onDraw()
方法,否则它不是必需的。如果新类没有覆盖它,将自动调用 super 的方法。