一、Android开发:用getDrawingCache方法获取ImageView中的图像需要注意的问题
http://www.linuxidc.com/Linux/2011-09/43131.htm1. 在调用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。