我在问自己如何SurfaceView
处理可见区域之外的绘图。我进行了一些在线研究,但找不到任何提出问题的人或任何回答问题的人。所以我做了一些测试,我的测试设置如下所示:
我在 a 上绘制 5000 个圆,SurfaceView
x 轴偏移为 -100,每 1000 个圆额外偏移 -100。偏移量Matrix
作为翻译存储在 a 中,并在使用 绘制之前应用于画布Canvas.concat()
。结果是SurfaceView
在其上绘制了 5000 个圆圈,但最初它们都在可见区域之外,您在屏幕上看不到它们。我运行了我的测试应用程序,对 . 应用了一个翻译Canvas
,这样圆形堆栈一个接一个地出现,并测量了每秒的帧数。所有更新和绘图都是使用一个尽可能频繁循环的简单线程完成的。
测量结果为:
- 0 个可见圆圈 -> ~ 40 FPS
- 1000 个可见圆圈 -> ~ 30 FPS
- 2000 个可见圆圈 -> ~ 20 FPS
- 3000 个可见圆圈 -> ~ 15 FPS
- 4000 个可见圆圈 -> ~ 12 FPS
- 5000 个可见圆圈 -> ~ 10 FPS
我需要提一下,这一切都是使用我自己的 2D 引擎完成的。在没有任何元素的情况下,它以 60 FPS 的速度运行。我认为第一个“丢失”的 20 FPS 可能是由于我的渲染管道迭代了 5000 个元素。
有谁知道更多关于SurfaceView
orCanvas
并且可以解释这种行为?
提前致谢!
测试设置:Nexus 10,Android 4.2.1,最小 SDK:14,目标 SDK:17