[英]View onDraw(Canvas c) versus draw(Canvas c) in android?
我是 android 开发的新手,我正在探索View
。 我遇到了已知的两种方法onDraw(Canvas c)
和draw(Canvas c)
。
请解释一下这两种方法的区别和用法? 使用图像更新画布时,哪种方法会提供更好的性能(FPS)?
他们之间是有区别的
onDraw(Canvas c)是一种重写方法,会在渲染视图时自动调用。 在这里你可以做额外的绘图,比如画圆圈、线条或任何你想要的东西。
draw(Canvas c)用于手动将此视图(及其所有子视图)渲染到给定的画布。 在调用此函数之前,视图必须已经完成了完整的布局。 实现视图时,实现onDraw(android.graphics.Canvas)
而不是覆盖此方法。 如果确实需要覆盖此方法,请调用超类版本。
或者简单来说, draw(Canvas c)只是一个视图函数,您可以在视图首次呈现后调用它。 此功能可用于在任何视图上自定义绘图。 您需要提供此视图将在其上呈现的画布,并且您还必须在调用此函数之前在画布上完成所有绘图。
就好像有人像我一样还在寻找答案但没有找到。
当需要重新绘制视图时,框架会调用 draw() 方法,然后 draw() 方法会调用 onDraw() 来绘制视图的内容。
void draw(Canvas canvas)
{
..... do default stuff (background, layers)
onDraw(canvas)
..... do other stuff ( scroll bars, fading edges, children)
}
由于笨拙的 API 文档,人们对此存在误解。
简短的回答是draw(Canvas)
是对 View 的入站调用以执行一些重要的事情,并且在draw(Canvas)
实现中间的某个地方它还会触发onDraw(Canvas)
回调。
View
时,不要覆盖draw(Canvas)
。draw()
将为您节省每个周期中一些不需要的调用。更长的答案
draw(Canvas)
。 这是我在 View 代码中可以找到的内容:
onDraw()
来了有用的提示
您可以将任何视图渲染到您创建的离屏位图中,然后在任何地方使用此位图:
Canvas c = new Canvas(); c.setBitmap(myOffscreenBitmap); myView.draw(c);
onDraw(Canvas)
也可以解决问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.