【发布时间】:2013-01-08 11:16:57
【问题描述】:
我在问自己SurfaceView 如何处理可见区域之外的绘图。我进行了一些在线研究,但找不到任何提出问题的人或任何回答问题的人。所以我做了一些测试,我的测试设置如下:
我在SurfaceView 上绘制了 5000 个圆,x 轴偏移为 -100,每 1000 个圆额外偏移 -100。偏移量存储在Matrix 中作为翻译,并在使用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 或Canvas 的信息并能解释这种行为吗?
提前致谢!
测试设置:Nexus 10,Android 4.2.1,最小 SDK:14,目标 SDK:17
【问题讨论】:
-
类似的问题,虽然我不确定这是否真的能回答任何问题,但至少可以花点时间了解一下:Android. . . drawing outside the bounds of a canvas
-
谢谢,这就是我考虑它的原因之一。我想我需要衡量一下。
标签: android android-canvas surfaceview