关于android canvas绘制的效率

我一直在想,如果canvas有一个界限。

我的意思是,如果我使用drawline(), drawbitmap(), drawcircle(),等函数drawline(), drawbitmap(), drawcircle(), android是否真的在canvas上画了一些东西并浪费了一些CPU周期?

因为在所有绘图function之后,屏幕上的实际图片打印是由屏幕大小决定的。 如果我画出超出屏幕尺寸的东西,它不会显示出来。

我想通过调用大量的绘图函数在canvas上做一些小细节,并使我的表面“闪烁金光闪闪”。 如果它超出限制,我不想使用它们,如果它们使我的绘图变慢。

我正在通过surfaceview的结构进行一个小游戏,感谢您的任何build议。

例如:

我有一个机器人从屏幕外的<b>行走。

它需要20个绘图function在canvas上绘制机器人步行图片。 如果我滚动屏幕,那么我可以看到机器人。

所以如果屏幕外的绘图function真的需要花费在屏幕上的时间。 只有当用户可以看到机器人的位置时,我才能检测到,然后绘制。 否则,我不。

如果绘图function不会浪费太多的CPU周期,那么即使当前屏幕看不到机器人,我也可以每次绘制。

Solutions Collecting From Web of "关于android canvas绘制的效率"

您的canvas由位图(2D)或openGL(3D,我没有经验)支持。 所有您的canvas上的绘图都被剪切到剪切矩形中,您可以增长,缩小,与新的矩形或path相交等。因此,在绘制到canvas之前,您确实想要pipe理剪裁矩形,特别是在支持一个大的位图。 如果剪辑到等于屏幕大小的区域,则可以节省CPU周期。 如果你的游戏是一个滚动types的游戏,你可以剪辑到一个大于屏幕大小的区域并平移,偶尔画出屏幕来更新屏幕上的区域。 如果你的游戏在所有方向上都有无限的滚动,那么你会希望有多个小的canvas,你可以画在你的主要中央canvas周围,并根据你的滚动游戏的方向从左到右,从上到下翻转。 带有一个canvas的一个大的位图可能对于一个小设备来说占用太大的内存空间。

另一件可以加速canvas绘制,当你的canvas覆盖整个屏幕时,是使用一个没有背景的主题。 默认的主题至less有一个可绘制的背景颜色,当您将视图置于顶部时,即使您的视图填满整个屏幕,也会导致较慢的绘制时间。

使用一个主题,如:

  <style name="Theme.NoBackground" parent="android:Theme"> <item name="android:windowBackground">@null</item> </style> </resources> 

罗曼·盖伊(Romain Guy)在http://www.curious-creature.org/2009/03/04/speed-up-your-android-ui/上对这种现象有了很好的描&#x8FF0;