天天看點

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遇到的問題(二)

記錄點點滴滴,如果有問題請指點.