关于android画布绘图的效率

时间:2010-10-16 15:57:50

标签: android canvas surfaceview

我一直想知道画布是否有限制边界。

我的意思是如果我使用drawline(), drawbitmap(), drawcircle(),之类的功能 android真的在画布上绘制了一些内容并浪费了一些CPU周期吗?

因为在所有绘图功能之后,决定了屏幕上的实际图片打印 按屏幕尺寸。如果我画的是屏幕尺寸以外的东西,它就不会显示出来。

我想通过调用大量的绘图功能在我的画布上做一些小细节,并使我的表面“bling bling”。如果它超出界限我不想使用它们,如果它们使我的绘图变慢。

我正在通过surfaceview的结构开展一个小游戏,感谢您的任何建议。

例如:

我有一个机器人从< - >走b在屏幕外面。

在画布上绘制机器人行走图片需要20个绘图功能。 如果我滚动屏幕,那么我可以看到机器人。

因此,如果屏幕外的绘图功能确实需要在屏幕上绘制的时间。 我必须检测到只有用户可以看到机器人的位置,然后我画。 否则,我没有。

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

2 个答案:

答案 0 :(得分:13)

当画布覆盖整个屏幕时,可以加快画布绘制的另一件事是使用没有背景的主题。默认主题至少有一个颜色背景可绘制,当您将视图放在其上时,即使您的视图填满整个屏幕,也会导致绘制时间变慢。

使用诸如以下的主题:

    <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/

对这种现象进行了很好的描述

答案 1 :(得分:5)

您的画布由您的位图(2D)或openGL(3D,我没有经验)支持。画布上的所有绘图都会剪切到剪切矩形,您可以将其缩小,缩小,与新的矩形或路径相交等。因此,您真的想要在绘制到画布之前管理剪裁矩形,尤其是在它支持的情况下一个大位图。如果剪切到与屏幕大小相等的区域,则可以节省CPU周期。如果您的游戏是滚动式游戏,您可以剪辑到大于屏幕尺寸的区域并平移,偶尔在屏幕外绘制以更新进入屏幕的区域。如果您的游戏在所有方向上都有无限滚动,那么您将需要在主要中央画布周围绘制多个较小的画布,并根据滚动游戏的方向从左到右,从上到下翻转它们。一个带有一个画布的大位图可能对于一个小型设备来说可能有太大的内存占用。