10

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

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

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

我想通过调用许多绘图函数在我的画布上做一些小细节并使我的表面“闪闪发光”。如果超出范围,我不想使用它们,如果它们使我的绘图速度变慢。

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

例如:

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

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

所以如果在屏幕外绘制功能真的和在屏幕上绘制一样花费时间。我必须检测到,只有当用户可以看到机器人的位置时,我才会绘制。否则,我不会。

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

4

2 回答 2

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/对这种现象有很好的描述

于 2010-10-16T18:41:19.033 回答
5

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

于 2010-10-16T16:22:13.353 回答