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


記錄點點滴滴,如果有問題請指點.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章