在Android中使用什么来绘制 - View或SurfaceView?

时间:2014-12-01 09:32:22

标签: android view android-canvas draw surfaceview

小序幕: 我正在为Android(API 14及更高版本)创建某种绘图应用程序。几个月前,我开始研究它并决定使用SurfaceView作为画布来绘制。我认为这是一个很好的决定因为 SurfaceView 可以直接使用Graphics。一切似乎工作正常,直到有一天我发现绘图过程有点滞后。那里可能有许多奇怪的代码。

无论如何,现在我正在优化代码和内容,我想,我真的需要使用SurfaceView来实现这样的场景吗?我需要的主要内容是" canvas"是绘制平滑并能够保存所有图纸到Bitmap->外部存储上的文件(这很好)。

那么,我应该使用简单的查看还是 SurfaceView ?而且,听到你的决定/主张的道具和缺点会很棒。

由于

1 个答案:

答案 0 :(得分:7)

如果您想使用Canvas,使用自定义View而不是SurfaceView会越来越好。简单的原因是View上的Canvas渲染可以是hardware accelerated,而SurfaceView表面上的Canvas渲染总是在软件中完成(从Android 5.0开始仍然如此)。

通过绘制“平滑”我假设你想要一些抗锯齿效果。检查硬件加速页面上的图表,确认您要发布的Android版本支持您想要的效果。

随着设备显示像素数量逐渐增加,软件渲染变得越来越昂贵,而在某些设备上,CPU或总线速度不够快,无法保持高帧率。幸运的是,在这些像素密度非常高的情况下,你真的不需要消除锯齿,所以即使它不受支持,你也可以忽略它,直到你生成软件渲染的位图。

在你做任何事情之前,明白你的迟钝源是明智的。您的绘图代码效率低下而不是像素填充率可能会降低您的速度。使用一些分析工具进行检查。

(另见graphics architecture doc。)