我是新来的Android开发,我正在探索关于View
。 我遇到已知两种方法onDraw(Canvas c)
和draw(Canvas c)
能否请您给我解释一下这两种方法的区别和用法? 哪种方法能够提供更好的性能(FPS)更新与图像的画布是什么时候?
我是新来的Android开发,我正在探索关于View
。 我遇到已知两种方法onDraw(Canvas c)
和draw(Canvas c)
能否请您给我解释一下这两种方法的区别和用法? 哪种方法能够提供更好的性能(FPS)更新与图像的画布是什么时候?
他们之间的区别
所述的onDraw(帆布c)中是一个覆盖方法和视图被呈现时自动调用。 在这里,你可以做你喜欢化妆界,任何你想要的线条或附加图。
的拉伸(帆布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)
回调。
draw(Canvas)
实现自定义时View
预期布局内使用。 draw()
将节省您的每一个周期一些不需要调用。 更长的答案
draw(Canvas)
在其绘制循环。 这就是我可以在视图代码中找到: onDraw()
来这里 有用的技巧
可以渲染任何视图为您创建一个屏幕外的位图,以后在任何地方使用该位图:
Canvas c = new Canvas(); c.setBitmap(myOffscreenBitmap); myView.draw(c);
onDraw(Canvas)
也可以做的伎俩。