本文译自:http://developer.android.com/guide/topics/graphics/hardware-accel.html

View层

在Android的所有版本中,通过使用View对象的绘图缓冲,或使用Canvas.saveLayer()方法,View对象都具有在屏幕外缓冲区呈现的能力。屏幕外缓冲区或层由多种用途。在呈现复杂的动画或使用组合效果时,它们能够获得更好的性能。例如,使用Canvas.saveLayer()方法暂时把一个View对象呈现在一个层中,然后使用不透明因子把该View对象合成到屏幕上,从而实现淡入淡出的效果。

从Android3.0(API Level 11)开始,用View.setLayerType()方法使用层的方式和时机会更多的控制。这个API需要两个参数:一个是层的类型,另一个是可选的,用于描述层应该如何被合成的Paint对象。能够使用这个Paint对象来进行颜色过滤、特殊的混合模式、或者层的透明度。View对象能够使用以下三种层类型:

LAYER_TYPE_NONE:View对象用普通的方式来呈现,并且不是由屏幕外缓存来返回的。这种类型是默认的行为;

LAYER_TYPE_HARDWARE:如果应用程序是硬件加速的,那么该View对象被呈现在硬件的一个硬件纹理中。如果没有被硬件加速,那么这种层类型的行为与LAYER_TYPE_SOFTWARE相同。

LAYER_TYPE_SOFTWARE:View对象会被呈现在软件的一个位图中。

使用哪种层的类型,依赖以下目标:

1.性能:使用硬件层类型,把View呈现到一个硬件纹理中。一旦该View对象被呈现到一个层中,那么它的绘图代码直到调用该View对象的invalidate()方法时才会被执行。对于某些动画,如alpha动画,就能够直接使用该层,这么做对于GPU来说是非常高效的。

2.视觉效果:使用硬件或软件层类型和一个Paint对象,能够把一些特殊的视觉处理应用给一个View对象。例如,使用ColorMatrixColorFilter对象绘制一个黑白相间的View对象。

3.兼容性:使用软件层类型会强制把一个View对象呈现在软件中。如果View对象被硬件加速(例如,如果整个应用程序都被硬件加速)发生呈现问题,那么使用软件层类型来解决硬件呈现管道的限制是一个容易的方法。

更多相关文章

  1. 在android中的ndk打印日志
  2. Android的Parcelable用法
  3. 【转】Android(安卓)分析内存的使用情况
  4. [置顶] Android中window,view,Activity的关系
  5. android 监听网络状态的变化及实战
  6. Android之RxJava(一)
  7. Android(安卓)进阶——持久化存储序列化方案Serializable和IPC及
  8. Android(安卓)的性能工具用法 II-内存分析工具I
  9. Android(安卓)- Activity 与 Window 与 View 之间的关系

随机推荐

  1. 盛大资深软件工程师谈Android开发经验
  2. Android远程接口之AIDL——Parcelable、i
  3. Android(安卓)---- WebView与JavaScript
  4. Android(安卓)5.0之后隐式声明Intent 启
  5. 在Android上使用OpenCL调用GPU加速
  6. Android提高第九篇之SQLite分页表格[转]
  7. Android(安卓)LruCache技术原理
  8. 不用线程做Android软件欢迎界面,透明效果
  9. Android(安卓)For JNI(六)——交叉编译,ND
  10. Android(安卓)下枚举型使用、及与 int 转