代码之家  ›  专栏  ›  技术社区  ›  Steven Shih

android画布绘制的效率

  •  10
  • Steven Shih  · 技术社区  · 14 年前

    我一直在想画布是否有一个界限。

    我是说如果我使用 drawline(), drawbitmap(), drawcircle(), 安卓真的会在画布上画一些东西,浪费一些CPU周期吗??

    因为在所有的绘图功能之后,屏幕上的实际图片打印是由 根据屏幕大小。如果我画的东西超出屏幕大小,它就不会出现。

    我正在做一个小游戏的结构的surfaceview,谢谢你的任何建议。

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

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

    所以,如果屏幕外的绘图功能真的需要和屏幕上的绘图一样多的时间。 否则,我不会。

    2 回复  |  直到 14 年前
        1
  •  5
  •   Brian Onn    14 年前

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

        2
  •  13
  •   mmeyer    14 年前

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

    使用主题,例如:

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