BKJIA獨家特稿】從Android 3.0開始,Android 2D的繪製流程就設計為能夠更好地支援硬體加速。使用GPU的View在Canvas上進行畫的操作時都會使用硬體加速。在最新的Android版本裡,圖形硬體加速及繪製技巧得到了更好的提升,BKJIA特約了最牛網站長作為本站專欄作者,為各位網友撰寫Android 4.0開發相關文章。
Android 4.0
1.Android 4.0硬體加速的使用
1.1 硬體加速的控制層級
啟用硬體加速的最簡單方法就是為整個系統開啟硬體加速的全域設定。如果你的程式是標準View或者是Drawable 則硬體加速的全域設這並不會造成不良的影響。然而硬體加速並不支援所有2D畫的操作,所以開啟硬體加速可能會對使用自訂群組件的應用程式造成影響,問題常常表現在不可見的元素異常和錯誤的像素渲染,為瞭解決這個問題Android可以讓你選擇啟動或者禁用以下層級的硬體加速:Application Activity Window 和 View 。
1.1.1 Application層級
在你的Android Manifest檔案中添加 屬性標記,以便為整個應用程式使用硬體加速。
1.1.2 Activity層級
如果你的應用程式不能在Application應用層級表現良好的話,則可以使用對Activity進行單獨控制。要啟動或者禁用一個Activity的硬體加速,你可以使用activity的android:hardwareAccelerated屬性。下面的一個列子使整個Application啟用硬體加速,但是對一個Activity禁止使用硬體加速。
1.1.3 Window層級
如果你需要更細粒度的控制,你可以通過如下代碼給window進行加速。
- getWindow().setFlags(
- WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);
注意:現階段你不能在Window層級對它禁用硬體加速。
1.1.4 View層級
我們可以對單獨的View在運行時階段禁用硬體加速。我們可以使用如下代碼:
- myView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
注意:現階段不能夠在View層級進行硬體加速。
1.2 判斷一個View是否已經啟用了硬體加速
有時候我們需要知道一個應用程式是否已經啟用了硬體加速,特別是針對一些自訂控制項。因為你的應用程式做了很多自訂“畫”的操作,但並不是所有的過程都支援新的“畫”的渲染過程。
有兩種不同的方法來檢查Application是否啟用了硬體加速:
1.2.1 使用View.isHardwareAccelerated() 如果返回true則可以說明這個View所在的視窗已經啟用了硬體加速。
1.2.2 Canvas.isHardwareAccelerated() 如果返回true則說明這個Canvas已經啟用了硬體加速。
如果你必須要在你的繪畫代碼中進行是否已經加速的檢查,如果可能的話請使用Canvas.isHardwareAccelerated()來代替View.isHardwareAccelerated()。當一個View是存在於一個已經加速的Windows上時,任然可以使用沒有硬體加速的Canvas進行繪畫,這場發生在,比如,當我們把一個View畫到Bitmap上然後用作緩衝。