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。

原文地址:https://www.cnblogs.com/bluestorm/p/6930097.html