硬件加速不只是好处,也有它的限制:受到 GPU 绘制方式的限制,Canvas
的有些方法在硬件加速开启式会失效或无法正常工作。比如,在硬件加速开启时, clipPath()
在 API 18 及以上的系统中才有效。具体的 API 限制和 API 版本的关系如下图:
根据HenCoder的结论展示,结果如下:
所以,如果你的自定义控件中有自定义绘制的内容,最好参照一下这份表格,确保你的绘制操作可以正确地在所有用户的手机里能够正常显示,而不是只在你的运行了最新版本 Android 系统的 Nexus 或 Pixel 里测试一遍没问题就发布了。小心被祭天。
不过有一点可以放心的是,所有的原生自带控件,都没有用到 API 版本不兼容的绘制操作,可以放心使用。所以你只要检查你写的自定义绘制就好。
如果你的代码刚好不支持,那么加上这句,这样可以关闭硬件加速
view.setLayerType(LAYER_TYPE_SOFTWARE, null);