一、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。
