从Android3.0 (API level11)开始,Android的2D显示管道被被设计得更加支持硬加速了.硬加速使用GPU承担了所有在View的canvas上执行的绘制操作.

启用硬加速最简单的的方法是对整个应用启用硬件速.如果你的应用只使用标准的view和Drawable,全局启用硬加速将不会带来任何负面影响.然而, 因为硬加速不是被所有的2D绘制所支持,所以启用它时可能对你的自定义绘制产生影响.出现的问题经常是不可见的,也可能是异常,或错误地显示了像素.为了 避免这些问题,Android提供了在以下各级别上启用或禁止硬加速的能力:

Application

Activity

Window

View

Application级
  在你的manifest文件中,把以下属性添加到<application>标签来对你的整个应用启用硬加速:

<applicationandroid:hardwareAccelerated="true" ...>

Activity级
  如果你的应用在全局启用硬加速时行为不正确,你可以对个别activities单独启用硬加速.欲在actvity级别启用或禁止硬加速,你可以 对<activity>元素使用android:hardwareAccelerated属性.下面的例子在整个应用中启用了硬加速但对一个 activity禁止了硬加速:

<applicationandroid:hardwareAccelerated="true">

<activity... />

<activityandroid:hardwareAccelerated="false" />

</application>

Window级
  如果你需要更高颗粒度的控制,你可以使用以下代码为一个window启用硬加速:

getWindow().setFlags(

WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,

WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED);

注:现在你还不能在window级别禁止硬加速.

View 级别

你可以在运行时使用以下代码禁止个别的View的硬加速:

myView.setLayerType(View.LAYER_TYPE_SOFTWARE,null);

注:当前你不能在View级别启用硬加速.View层有除禁止硬加速之外的其它功能.

判定一个View是否能被硬加速

  有时一个应用了解是否启用了硬件速是很有用的,对那些自定义View之类的东西尤其重要.在你的应用做了一些不被最新的管线所支持的自定义绘制时这更加重要.

  有两种方法可以检查应用是否被硬加速:

View.isHardwareAccelerated():如果View附加到一个硬加速的window上就返回true.

Canvas.isHardwareAccelerated():如果Canvas被硬加速了就返回true.

  如果你必须在你的绘制代码中做这个,应使用Canvas.isHardwareAccelerated()而不是 View.isHardwareAccelerated().当一个view附加到一个硬加速的window上,它仍可以使用非硬件速的Canvas进行 绘制操作.比如当为了高速缓存而把一个view画到一个bitmap中.

更多相关文章

  1. Android(安卓)快速实现 ViewPager 滑动页卡切换(可用作整个 app上
  2. 通过创建一个位图的XY Chart来学习Android绘图类Rect,Paint,Bitm
  3. (4.1.36.3)android Graphics(一):概述及基本几何图形绘制
  4. Android中UI视图之试图绘制机制
  5. Android(安卓)UI编程进阶——使用SurfaceViewt和Canvas实现动态
  6. 【摘录】Android中UI视图之试图绘制机制
  7. Android检查GPU呈现速度和过度绘制
  8. Android(安卓)自定义View界面大合集
  9. Android隐喻(三) 图形绘制: Canvas、SurfaceView、Paint、Surface

随机推荐

  1. Android下获取Root权限和设置目录属性
  2. Android开发小知识文章目录
  3. Android(安卓)App状态栏动态显示隐藏
  4. Android UI 之 onTouchEvent, onClick及o
  5. Android Layout布局文件里的android:layo
  6. 哪些年遇到过的Andriod问题(5)This text
  7. Android:在Eclipse下开发android应用产生
  8. android中国风笔记源码,金鱼游动动画源码
  9. (转帖)Android系列之浅谈Android 3D旋转
  10. android 图片的 放大 缩小 移动