我需要再打super.onDraw()自定义视图?(Do I need to call back s

2019-07-28 20:51发布

我不是太清楚这一点,无论是文档。

当我创建一个自定义视图,我重写像这样:

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

    //more code here...
}

我的问题是,是否有必要调用super.onDraw(canvas); 。 该代码似乎没有它工作得很好,但我想,以确保它的好离开它。

因此,有必要吗?

Answer 1:

如果你想让它调用父类的onDraw方法(TextView的思考或KeyboardView,而不是一个通用的视图),然后调用super.onDraw。 如果你不希望出现这种情况,即你正在计划绘制整个看待自己(这看来你是),没有理由来调用它。

另外,如果你在扩展视图(而不是一些类,它扩展视图),super.onDraw并没有真正做任何事情。

对于我来说,我打电话super.onDraw时,我想画在KeyboardView线。 所以,super.onDraw平键盘,和我的自定义LatinKeyboardView(延伸KeyboardView)借鉴了键盘顶部的刷卡通路。



Answer 2:

在源代码中的窥视显示View.onDraw()是一个空的方法。 因此,呼吁super.onDraw()如果父类是View本身,什么也不做。 这是不必要的又是无害的。

无论你应该继续做吧是的效率,安全性和风格的独立问题。



Answer 3:

是的。 如果您自定义一个TextView,该super.onDraw将确保提请任何属于TextView的属性(如文本,文本颜色,文字阴影,等...),与其他浏览像按钮一样,复选框...

如果您的自定义视图扩展视图(View的不是一个具体的子类,只需查看),它仍然是最好保留super.onDraw(画布)也有一段查看绘图方法(如setBackgroundDrawable,等...)



Answer 4:

它不是必需的,除非你实际上是重写onDraw()方法。 如果新的类没有覆盖它,超级的方法会自动被调用。



文章来源: Do I need to call back super.onDraw() in a custom view?