我是Android开发新手,我正在探索约View
。我碰到已知的两种方法onDraw(Canvas c)
和draw(Canvas c)
。在android中查看onDraw(Canvas c)与draw(Canvas c)?
请给我解释这两种方法的区别和用法吗?更新画布时,哪种方法可以提供更好的性能(FPS)?
我是Android开发新手,我正在探索约View
。我碰到已知的两种方法onDraw(Canvas c)
和draw(Canvas c)
。在android中查看onDraw(Canvas c)与draw(Canvas c)?
请给我解释这两种方法的区别和用法吗?更新画布时,哪种方法可以提供更好的性能(FPS)?
有他们
的onDraw(Canvas c)之间差是一个覆盖方法和视图被呈现时自动调用。在这里你可以做你的额外的绘画,如制作圆圈,线条或任何你想要的。
draw(Canvas c)用于手动将此视图(及其所有子项)呈现给定画布。在调用这个函数之前,视图必须已经完成了一个完整的布局。在实现视图时,请执行onDraw(android.graphics.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)
是一个入境呼吁一个视图做一些重要的东西,并在draw(Canvas)
执行中间的某个地方,它也会触发一个onDraw(Canvas)
回调。
View
时,不要覆盖draw(Canvas)
。 draw()
将在每个周期为您节省一些不需要的调用。再回应
draw(Canvas)
。这就是我可以在视图代码中找到:
onDraw()
来这里有用的提示
可以渲染任何视图为您创建一个屏幕外的位图,并在以后使用该位图的任何地方:当它不
Canvas c = new Canvas();
c.setBitmap(myOffscreenBitmap);
myView.draw(c);
onDraw(Canvas)
也可以做到这一点。
能告诉我这2种方法 – mini
之间的性能(FPS),我看不出这个答案。好像你刚刚从内联文档中粘贴 – Migisha
从我的测试中,当视图呈现时,两者都会被调用。绘制(Canvas c)将首先调用,然后onDraw(Canvas c)调用内部绘制(Canvas c)。所以我不认为这里的“不自动调用”一词是有效的,因为当视图呈现时,两者都被“自动调用”。框架自动调用 – HendraWD