您的位置:首页 > 运维架构

Android setPolyToPoly遇到的问题(一)

2017-12-02 12:14 411 查看

# 问题

最近使用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);


或者使用 android:layerType="software" 来关闭硬件加速

判断View是否启用了硬件加速 view.isHardwareAccelerated()
或者 canvas.isHardwareAccelerated()

使用自定义canvas解决此问题点击查看Android
setPolyToPoly遇到的问题(二)

记录点点滴滴,如果有问题请指点.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐