前言:问题来自于StackOverflow上,关于绘制可缩放地图应用的问题。Android硬件加速,也就是GPU渲染,是为了减轻绘制界面时的UI卡顿,通过GPU分担CPU的计算量。但是GPU有内存限制的,如果绘制的Shape过大,会出现报错“Shape path is too large to be rendered into a texture”。因此将这个 Q&A 翻译出来,以便更好理解。
问题
我使用自定义的path绘制地图。在我的Android4.0.4设备上,移动和缩放地图的体验很好,非常流畅。
但是当系统更新到4.1.2时,oh my god, everything is different:放大时,地图很模糊;移动时,地图卡顿像抽风一样。但是我并没有改过代码!
更奇怪的是,虚拟机上跑起来缩放依然流畅。
上面的控诉都是有图为证的:unsharp as in the attached picture/see the screenshot below。
你问我实现了什么功能?我做了很多x=0-2000和y=0-1500区域的path,并且当前只绘制能够在屏幕上显示的path。缩放,我采用的是自定义的view中onDraw()方法中的canvas.scale(x,y);移动,我采用的是自定义view中onDraw()方法的canvas.translate(x,y)。
我想尝试的是:
1.希望将所有的path转换而不是通过canvas转换,也许canvas是有用的,但是我的shape变得非常大,大到无法绘制(…“Shape path too large to be rendered into a texture”
2.用更大的坐标系重建path。同1一样的问题,而且它很慢“Shape path too large to be rendered into a texture”
3.将shape切割成更多shape并不能解决问题,我已经在我的4.0.4版本上尝试过了,我也想正确的绘制出边界啊…(比如海岸线什么的)
Can you help me?
回答
我更新到JellyBean版本后也是酱,因为该版本默认开启了Hardware Accelerated。我在AndroidManifest里禁用了这个:android:hardwareAccelerated=“false”
regards
woooo……
作者根本就已经实现了我想做的功能:地图,可移动,可缩放,流畅,不卡顿。只需要禁用一下GPU强制渲染…