我是否需要在自定义视图中回调super.onDraw()?

时间:2012-04-09 02:42:10

标签: android android-custom-view

我对此并不太清楚,也不是文档。

当我创建自定义视图时,我会这样重写:

@Override
public void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    //more code here...
}

我的问题是是否有必要致电super.onDraw(canvas);。没有它,代码似乎工作得很好,但我想确定它可以不用了。

有必要吗?

4 个答案:

答案 0 :(得分:15)

如果你想让它调用超类onDraw方法(想想TextView或KeyboardView而不是一般的View),那么调用super.onDraw。如果你不想那样,即你打算自己绘制整个视图(你似乎是这样),就没有理由去调用它。

此外,如果您正在扩展View(而不是某些扩展视图的类),则super.onDraw实际上并没有做任何事情。

对我来说,当我想在KeyboardView上绘制线条时,我会调用super.onDraw。因此,super.onDraw绘制键盘,我的自定义LatinKeyboardView(扩展KeyboardView)在键盘顶部绘制滑动路径。

答案 1 :(得分:9)

查看源代码显示View.onDraw()是一个空方法。因此,调用super.onDraw(),如果父类本身是View,则不执行任何操作。它不必要但无害。

无论你是否应该继续这样做,都是效率,安全和风格的独立问题。

答案 2 :(得分:2)

是的,确实如此。如果您自定义TextView,super.onDraw将确保绘制属于TextView属性的任何内容(如文本,文本颜色,文本阴影等...)与其他视图相同,如Button,CheckBox ...

如果您的自定义View扩展View(不是View的特定子类,只是View),最好将super.onDraw(canvas)留给那些View的绘制方法(如setBackgroundDrawable等等)< / p>

答案 3 :(得分:0)

除非您实际覆盖onDraw()方法,否则不需要。如果新类没有覆盖它,则会自动调用super的方法。