你的分享就是我们的动力 ---﹥

Android 4.0的图形硬件加速及绘制技巧(1)

时间:2011-11-18 09:23来源:www.chengxuyuans.com 点击:

【51CTO独家特稿】从Android 3.0开始,Android 2D的绘制流程就设计为能够更好地支持硬件加速。使用GPU的View在Canvas上进行画的操作时都会使用硬件加速。在最新的Android版本里,图形硬件加速及绘制技巧得到了更好的提升,51CTO特约了最牛网站长作为本站专栏作者,为各位网友撰写Android 4.0开发相关文章。

Android 4.0

Android 4.0

1.Android 4.0硬件加速的使用

1.1 硬件加速的控制级别

启用硬件加速的最简单方法就是为整个系统打开硬件加速的全局设置。如果你的程序是标准View或者是Drawable 则硬件加速的全局设这并不会造成不良的影响。然而硬件加速并不支持所有2D画的操作,所以开启硬件加速可能会对使用自定义组件的应用程序造成影响,问题常常表现在不可见的元素异常和错误的像素渲染,为了解决这个问题Android可以让你选择启动或者禁用以下级别的硬件加速:Application Activity Window 和 View 。

1.1.1 Application级别

在你的Android Manifest文件中添加 属性标记,以便为整个应用程序使用硬件加速。

1.1.2 Activity级别

如果你的应用程序不能在Application应用级别表现良好的话,则可以使用对Activity进行单独控制。要启动或者禁用一个Activity的硬件加速,你可以使用activity的android:hardwareAccelerated属性。下面的一个列子使整个Application启用硬件加速,但是对一个Activity禁止使用硬件加速。

1.1.3 Window级别

如果你需要更细粒度的控制,你可以通过如下代码给window进行加速。

  1. getWindow().setFlags( 
  2. WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED); 

注意:现阶段你不能在Window级别对它禁用硬件加速。

1.1.4 View级别

我们可以对单独的View在运行时阶段禁用硬件加速。我们可以使用如下代码:

  1. myView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 

注意:现阶段不能够在View级别进行硬件加速。

1.2 判断一个View是否已经启用了硬件加速

有时候我们需要知道一个应用程序是否已经启用了硬件加速,特别是针对一些自定义控件。因为你的应用程序做了很多自定义“画”的操作,但并不是所有的过程都支持新的“画”的渲染过程。

有两种不同的方法来检查Application是否启用了硬件加速:

1.2.1 使用View.isHardwareAccelerated() 如果返回true则可以说明这个View所在的窗口已经启用了硬件加速。

1.2.2 Canvas.isHardwareAccelerated() 如果返回true则说明这个Canvas已经启用了硬件加速。

如果你必须要在你的绘画代码中进行是否已经加速的检查,如果可能的话请使用Canvas.isHardwareAccelerated()来代替View.isHardwareAccelerated()。当一个View是存在于一个已经加速的Windows上时,任然可以使用没有硬件加速的Canvas进行绘画,这场发生在,比如,当我们把一个View画到Bitmap上然后用作缓存。

本文地址http://www.chengxuyuans.com/Android/32130.html