# 问题
最近使用Matrix遇到一件比较诡异的问题,使用 Matrix.setPolyToPoly
接口绘制一个多边形,在 华为
手机上遇到变形错位的问题.
把 Matrix 作用到系统传递过来的 canvas 上面,理论上来说这应该是没有问题的,但不知华为系统对 canvas 作了什么处理,就是不正常.
# 解决办法
通过查阅相关资料,发现这个问题是由硬件加速造成的.
简单的说下硬件加速的优缺点:硬件加速能使用GPU来加速2D图像的渲染速度,但是硬件加速并不能完全支持所有的渲染操作,那么使用硬件加速就可能导致渲染出现错误.
# 开启和关闭硬件加速
对硬件加速的开关可以在不同的级别进行控制:
- Application
- Activity
- Windows
- View
Application级别
在Application级别控制硬件加速的开关:
<application android:hardwareAccelerated="true" ...>
Activity级别
可以对单个Activity控制是否启用硬件加速:
<application android:hardwareAccelerated="true">
<activity ... />
<activity android:hardwareAccelerated="false" />
</application>
Window级别
对Window添加是否启用硬件加速:
getWindow().setFlags(
WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
View级别
指定View上关闭硬件加速:
mView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
判断View是否启用了硬件加速 view.isHardwareAccelerated() 或者 canvas.isHardwareAccelerated()
使用自定义canvas解决此问题点击查看Android setPolyToPoly遇到的问题(二)
记录点点滴滴,如果有问题请指点.