Android學習——控制硬加速 hardwareAccelerated

Android學習——控制硬加速  hardwareAccelerated 在3.0纔有的。            

       分類:            android學習            2012-04-27 13:59    8742人閱讀    評論(4)    收藏    舉報    android

androidapplicationapinull測試canvas

從Android3.0 (API level11)開始,Android的2D顯示管道被被設計得更加支持硬加速了.硬加速使用GPU承擔了全部在View的canvas上執行的繪製操做.api

  啓用硬加速最簡單的的方法是對整個應用啓用硬件速.若是你的應用只使用標準的view和Drawable,全局啓用硬加速將不會帶來任何負面影響.然 而,由於硬加速不是被全部的2D繪製所支持,因此啓用它時可能對你的自定義繪製產生影響.出現的問題常常是不可見的,也多是異常,或錯誤地顯示了像素. 爲了不這些問題,Android提供了在如下各級別上啓用或禁止硬加速的能力:緩存

Applicationapp

Activity學習

Window測試

Viewspa

  若是你的應用使用了自定義繪製,須要在真實的設備上啓用硬加速進行測試來找出問題."不支持的繪製操做"一節描述了已知的不能被硬加速的繪製操做以及如何避開它們..net

 

 

控制硬加速設計

  你能夠在如下級別上分別控制硬加速:

Application

Activity

Window

View

 

Application級
  在你的manifest文件中,把如下屬性添加到<application>標籤來對你的整個應用啓用硬加速:

<applicationandroid:hardwareAccelerated="true" ...>

Activity級
  若是你的應用在全局啓用硬加速時行爲不正確,你能夠對個別activities單獨啓用硬加速.欲在actvity級別啓用或禁止硬加速,你能夠 對<activity>元素使用android:hardwareAccelerated屬性.下面的例子在整個應用中啓用了硬加速但對一個 activity禁止了硬加速:

<applicationandroid:hardwareAccelerated="true">

<activity... />

<activityandroid:hardwareAccelerated="false" />

</application>

Window級
  若是你須要更高顆粒度的控制,你可使用如下代碼爲一個window啓用硬加速:

getWindow().setFlags(

WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,

WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);

 

 

注:如今你還不能在window級別禁止硬加速.

 


Viewlevel

你能夠在運行時使用如下代碼禁止個別的View的硬加速:

myView.setLayerType(View.LAYER_TYPE_SOFTWARE,null);

 


注:當前你不能在View級別啓用硬加速.View層有除禁止硬加速以外的其它功能.

 

 

斷定一個View是否能被硬加速

  有時一個應用瞭解是否啓用了硬件速是頗有用的,對那些自定義View之類的東西尤爲重要.在你的應用作了一些不被最新的管線所支持的自定義繪製時這更加劇要.

 

  有兩種方法能夠檢查應用是否被硬加速:

View.isHardwareAccelerated():若是View附加到一個硬加速的window上就返回true.

Canvas.isHardwareAccelerated():若是Canvas被硬加速了就返回true.

 

  若是你必須在你的繪製代碼中作這個,應使用Canvas.isHardwareAccelerated()而不是 View.isHardwareAccelerated().當一個view附加到一個硬加速的window上,它仍可使用非硬件速的Canvas進行 繪製操做.好比當爲了高速緩存而把一個view畫到一個bitmap中.

相關文章
相關標籤/搜索