我有一个可以缩放和平移的自定义视图。它只是显示path
(其坐标从API获取)。由于Path
作为纹理上传到GPU然后绘制,因此可以绘制path
的维度的最大限制(因设备而异)。我的自定义视图可能会变得非常大(面积大于30000像素),为了克服限制,我在自定义视图中使用了setLayerType(LAYER_TYPE_SOFTWARE)
。它运作良好,但它不能帮助我提供60FPS。
为了将帧速率提高到60FPS,我决定切换回LAYER_TYPE_NONE
。现在,我没有取消选中路径比例,而是决定在某个特定的缩放级别停止它并进一步缩放,缩放canvas
(失去清晰度)。为了找到我应该停止缩放path
并开始缩放canvas
的缩放级别,我一直在做一些路径(我使用nexus 7(2012)和nexus 9作为测试设备)
我希望只有在达到纹理大小限制(我发现使用path too large to be rendered into a texture
后)之后才会看到消息canvas.isHardwareAccelerated()
。
path too large to be rendered into a texture
。我预计这会发生在2048年!! A/libc﹕ Fatal signal 11 (SIGSEGV), code 1, fault addr 0x78 in tid 7252 (RenderThread)
崩溃。例如,这些是应用程序崩溃时自定义视图的一些维度:(7199,5049),(13814,2500),(8040,4200)。我能找到的唯一共性是自定义视图的总面积(以及path
)增长超过32,000,000像素。 因此,我无法决定何时应该从缩放path
切换到缩放canvas
。关于何时这样做的任何想法?
编辑1
我观察到,对于nexus 9,只要path
的总面积达到~33,000,000,app就会崩溃。这个限制意味着什么?