Android Canvas Off Screen Drawing Performance

时间:2012-05-15 10:13:33

标签: android performance graphics clipping off-screen

我正在使用Canvas元素开发Android游戏。我在大型游戏地图上绘制了许多图形元素(精灵)。这些元素由标准图形函数绘制,如drawLinedrawPathdrawArc等。

测试它们是否在屏幕上并不难。因此,如果它们不在屏幕上,我可以完全跳过它们的绘图程序。但即使这样也有CPU成本。我想知道Android Graphics Library能否以更快的速度做到这一点?

简而言之,我是否应该尝试绘制所有内容,即使它们完全位于屏幕坐标之外,相信Android Graphics Library会照顾它们并且不会花太多CPU试图绘制它们,或者我应该检查它们的绘图区域矩形我自己,如果他们完全没有屏幕,跳过绘图程序?哪种方法适当?哪一个应该更快?

p.s:我的目标是Android v2.1及更高版本。

1 个答案:

答案 0 :(得分:4)

从一个不完全科学的测试中,我绘制了比屏幕更大的区域绘制位图,我发现事先检查Bitmap是否在屏幕上似乎并没有相当大的不同。

在一个测试中,我将Rect设置为屏幕大小,并将另一个Rect设置为Bitmap的位置,并在绘制之前检查Rect.intersects()。在另一个测试中我刚绘制了Bitmap。在300-ish绘制之后没有明显的趋势 - 有些走了一条路,有些走了另一条道路。我在每一帧都尝试过300次测试,帧与帧之间的差异远大于已检查和未经检查的绘图之间的差异。

从那个我认为Android检查绑定在其原生代码中是安全的,或者你期望有相当大的差异。我会分享我的测试代码,但我认为在你的情况下你做自己的测试是有意义的。可能的点与Bitmaps的行为不同,或者您的绘画或画布的某些其他功能会改变事物。

希望能帮助你(或其他人像我对同一个问题那样偶然发现这个帖子)。