我是 android 开发新手,我正在探索View
. 我遇到了已知的两种方法onDraw(Canvas c)
和draw(Canvas c)
.
请解释一下这两种方法的区别和用法?用图像更新画布时,哪种方法会提供更好的性能(FPS)?
我是 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 文档,对此存在误解。
简短的回答是对 Viewdraw(Canvas)
进行入站调用以执行一些重要的事情,并且在实现中间的某个地方draw(Canvas)
它也会触发onDraw(Canvas)
回调。
draw(Canvas)
在实现View
打算在布局内使用的自定义时不要覆盖。draw()
将在每个循环中为您节省一些不需要的调用。更长的答案
draw(Canvas)
在其绘制周期中使用。这是我可以在查看代码中找到的:
onDraw()
来这里有用的提示
您可以将任何视图渲染到您创建的屏幕外位图中,然后在任何地方使用此位图:
Canvas c = new Canvas();
c.setBitmap(myOffscreenBitmap);
myView.draw(c);
onDraw(Canvas)
也可以解决问题。