View的setLayerType() , setDrawingCacheEnabled() 方法用法


一、Android開發:用getDrawingCache方法獲取ImageView中的圖像需要注意的問題
http://www.linuxidc.com/Linux/2011-09/43131.htm

1.     在調用getDrawingCache()方法從ImageView對象獲取圖像之前,一定要調用setDrawingCacheEnabled(true)方法:

            iv_photo.setDrawingCacheEnabled(true);

        否則,無法從ImageView對象iv_photo中獲取圖像;

2.     在調用getDrawingCache()方法從ImageView對象獲取圖像之后,一定要調用setDrawingCacheEnabled(false)方法:

            iv_photo.setDrawingCacheEnabled(false);

        以清空畫圖緩沖區,否則,下一次從ImageView對象iv_photo中獲取的圖像,還是原來的圖像。

    // ImageView對象(iv_photo)必須做如下設置后,才能獲取其中的圖像

    iv_photo.setDrawingCacheEnabled(true);

    // 在ImageView對象(iv_photo)被touch down的時候,獲取ImageView中的圖像

    obmp = Bitmap.createBitmap(iv_photo.getDrawingCache());

    //從ImaggeView對象中獲取圖像后,要記得調用setDrawingCacheEnabled(false)清空畫圖緩

    //沖區,否則,下一次用getDrawingCache()方法回去圖像時,還是原來的圖像

    iv_photo.setDrawingCacheEnabled(false);

  

二、mView.setLayerType(View.LAYER_TYPE_HARDWARE, null); 

Android應用程序UI硬件加速渲染的動畫執行過程分析

http://blog.csdn.net/luoshengyang/article/details/46449677

http://blog.csdn.net/luoshengyang/article/details/45601143

 

我們提到了Render Thread對動畫顯示的兩個優化。第一個優化是在動畫顯示期間,臨時將動畫的目標View的Layer Type設置為LAYER_TYPE_HARDWARE,這樣就可以使得目標View以Open GL里面的Frame Buffer Object(FBO)進行渲染。這種優化的效果就如Render Thread直接以Open GL里面的Texture來渲染TextureView一樣。第二個優化是在Main Thread不需要參與動畫的顯示過程時,動畫就會被注冊到Render Thread中,這樣動畫的計算和顯示過程就完全由Render Thread來負責。這種優化帶來的好處就是在動畫顯示期間,Main Thread可以去處理其它的用戶輸入,而且動畫的顯示也會更加流暢。

 

有了這個ViewPropertyAnimator對象之后,就可以調用它的成員函數withLayer將它關聯的View的Layer Type設置為LAYER_TYPE_HARDWARE

 

mView.setLayerType(View.LAYER_TYPE_HARDWARE, null);  

 

可以看到:

       1. 在動畫開始顯示之前,目標View的Layer Type會被設置為LAYER_TYPE_HARDWARE,並且它的成員函數buildLayer會被調用來創建一個Layer。

       2. 在動畫結束顯示之后,目標View的Layer Type會被恢復為它之前的Layer Type。注意,這里調用目標View的成員函數getLayerType獲得的是它的Layer Type未被設置為LAYER_TYPE_HARDWARE的Layer Type。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM