我问自己SurfaceView
如何处理可见区域外的绘图。我做了一些在线研究,但找不到任何问或任何回答问题的人。所以我做了一些测试,我的测试设置如下:
我在SurfaceView
上绘制了5000个圆圈,x轴偏移为-100,每1000个圆圈附加-100偏移。偏移量作为平移存储在Matrix
中,并在使用Canvas.concat()
进行绘制之前应用于画布。结果是SurfaceView
上绘制了5000个圆圈,但最初它们都在可见区域之外,并且您在屏幕上看不到它们。我运行了我的测试应用程序,将翻译应用到Canvas
,以便圆形堆栈一个接一个地出现,并测量每秒的帧数。所有更新和绘图都是使用一个尽可能多地循环的简单线程完成的。
测量结果如下:
我需要提一下,这都是使用我自己的2D引擎完成的。没有任何元素,它以60 FPS运行。我认为第一个“缺失的”20 FPS可能是由我的渲染管道产生的,它遍历5000个元素。
是否有人对SurfaceView
或Canvas
有更多了解并可以解释这种行为?
提前致谢!
测试设置:Nexus 10,Android 4.2.1,min SDK:14,目标SDK:17
答案 0 :(得分:1)
根据WarrenFaith发布的有关图形硬件的说明,我测量了绘制所有圆圈和绘图前检查之间的区别。事实证明绝对没有区别!为了确保我甚至将圈数增加到50000,两个测试都以大约4到5 FPS的速度运行,没有可见的圆圈。