Android setPolyToPoly遇到的问题(一)

问题

最近使用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遇到的问题(二)


记录点点滴滴,如果有问题请指点.
  • 1
    点赞
  • 0
    收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:技术黑板 设计师:CSDN官方博客 返回首页
评论
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值