【问题标题】:How does a SurfaceView handle off screen elements?SurfaceView 如何处理屏幕外元素?
【发布时间】: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 个元素。

有谁知道更多关于SurfaceViewCanvas 的信息并能解释这种行为吗?

提前致谢!

测试设置:Nexus 10,Android 4.2.1,最小 SDK:14,目标 SDK:17

【问题讨论】:

标签: android android-canvas surfaceview


【解决方案1】:

根据 WarrenFaith 发布的关于图形硬件的说明,我测量了绘制所有圆圈和绘制前检查之间的差异。事实证明绝对没有区别!可以肯定的是,我什至将圈数增加到 50000,并且两个测试都以大约 4 到 5 FPS 的速度运行,没有可见的圈子。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-28
    • 2020-01-08
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多