Android 4.0兼容性问题:Canvas.clipPath的问题

3

最近我的应用程序收到了很多评论,说在安卓冰淇淋三明治和CM9上“不起作用”。我无法在运行Android 4.0的模拟器上重现错误,并且由于android市场的工作方式,我无法联系这些人以询问详细信息。

幸运的是,一个崩溃错误报告引起了我的注意。我正在使用Canvas.clipPath来绘制圆角...看起来一些手机在尝试使用该功能时会抛出UnsupportedOperationException。快速查看Google发现,这似乎是在Android 4.0中使用硬件加速时的问题-这就是收到评论的潜在原因。

问题是-发生了什么?以前的Android版本中的应用程序不是已经进行了硬件加速吗?为什么这样常见的功能不受支持?有什么解决方法?

Canvas.clipPath的示例用法可以在我的其他帖子中找到。请查看此处的已接受答案:Android rounded corners in ListView

提前致谢


我在我的应用程序中也发现了同样的问题。你可以在Manifest.xml文件中设置android:hardwareAccelerated="false"作为解决方法。这在Honeycomb上有效,并且可能在ICS上也是有效的。 - CjS
2个回答

6
在ICS版本中,默认启用硬件加速。直到4.0版本,硬件加速默认是关闭的。 硬件加速不支持clipPath(和其他几个操作,请在此处了解更多信息)。 我面临着同样的问题。作为快速修复,我将关闭整个应用程序的加速,并稍后重写代码以不使用clipPath。

你找到绕过ClipPath的方法了吗? - Oliver Dixon
@Olly Dixon 不是的。我想要硬件加速,所以最终我用了不同的方式重写了代码,没有使用clipPath。 - yoah
+1,哇,安卓真是让我惊叹不已...没有警告、异常,但当你使用更新的SDK时,你的一半绘图代码就被简单地转换成了NOPs。 - mvds
我很困惑,如果在ICS中默认开启了硬件加速,为什么clipPath会失败?我在哪里可以看到与硬件加速兼容的canvas API列表? - numan salati
@numan请查看上面指定的链接(http://android-developers.blogspot.co.il/2011/03/android-30-hardware-acceleration.html)。它包含了支持的操作的完整列表。 - yoah
@yoah 我已经看到了。它是为蜂巢版本发布的。我想知道ICS和JB的情况。它应该在API文档中,但不幸的是它没有 :( - numan salati

2

理论上是可以的,但存在缺陷。一些安卓设备仍会尝试使用硬件加速。 - Sebastian Nowak
真的吗?我在哪里可以看到更多关于发生这种情况的设备或有人经历过的信息? - ffleandro
有可能,Android 4.0.* 忽略了 Java 设置层为软件的方式,而开发者选项可以覆盖清单。 - cheng yang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接