我对此不太清楚,也没有文档。我是否需要在自定义视图中回调super.onDraw()?
当我创建一个自定义视图,我重写像这样:
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
//more code here...
}
我的问题是,是否有必要调用super.onDraw(canvas);
。如果没有它,代码似乎可以正常工作,但我想确保可以放弃它。
那么有必要吗?
我对此不太清楚,也没有文档。我是否需要在自定义视图中回调super.onDraw()?
当我创建一个自定义视图,我重写像这样:
@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)在键盘上绘制了滑动路径。
是的,我第二次说KeyboardView需要super.onDraw(),如果你想绘制任何额外的键。 – 2012-08-15 02:44:38
是的。如果你自定义一个TextView,super.onDraw将确保绘制任何属于TextView属性(如文本,文本颜色,文本阴影等)。与其他视图一样,如Button,CheckBox ...
如果你的自定义视图扩展视图(不是视图的特定子类,只是视图),最好留下super.onDraw(画布)那里的一些视图的绘制方法(如setBackgroundDrawable等...)
查看源代码显示View.onDraw()
是一个空方法。所以,打电话super.onDraw()
,如果父类是View
本身,什么都不做。这是不必要的,但无害。
无论你应该继续做还是做一个单独的效率,安全和风格问题。
不知道是否需要,但原则上这是个好习惯。 – trutheality 2012-04-09 02:49:29
如果你想让超类实现的代码也被执行,你只需要调用'super.onDraw()'。如果你不依赖于你自定义的'View'的超类所做的绘图(例如,所有需要的绘图都在你的本地覆盖方法中完成),那么你不需要调用它,除非文档明确指出。 – 2012-04-09 02:49:50