关于android画布绘图的效率

Ste*_*hih 10 android canvas surfaceview

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

我的意思是,如果我使用像drawline(), drawbitmap(), drawcircle(), android 这样的功能真的在画布上绘制一些东西并浪费一些CPU周期?

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

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

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

例如:

我有一个机器人从< - > b走出屏幕.

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

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

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

mme*_*yer 13

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

使用如下主题:

    <style name="Theme.NoBackground" parent="android:Theme">
        <item name="android:windowBackground">@null</item>
    </style>
</resources>
Run Code Online (Sandbox Code Playgroud)

Romain Guy在http://www.curious-creature.org/2009/03/04/speed-up-your-android-ui/对此现象进行了很好的描述.


Bri*_*Onn 5

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