Android硬件加速

转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/123338017
本文出自【赵彦军的博客】

Android 硬件加速原理

Android 硬件加速原理

理解Android硬件加速原理的小白文

硬件加速控制(Controlling Hardware Acceleration)

android提供了以下四个级别的硬件加速控制:

  • Application
  • Activity
  • Window
  • View

Application级别

在应用的Android清单文件中,把下列属性添加到元素中,能够开启整个应用程序的硬件加速:

<application android:hardwareAccelerated="true" ...>

Activity级别

如果不能再应用程序级别全局打开硬件加速,那么也可以在Activity级别上进行控制。在<activity>元素中使用 android:hardwareAccelerated 属性,能够启用或禁止Activity级别的硬件加速。

以下示例启用全局的硬件加速,但却禁止了一个Activity的硬件加速:

<application android:hardwareAccelerated="true">
    <activity ... />
    <activity android:hardwareAccelerated="false" />
</application>

Window级别

如果需要更精细的控制,就可以使用下列代码来针对给定的Window来启用硬件加速:

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

注意:目前无法在Window级别禁止硬件加速。

View级别

在运行时,可以针对一个独立的View对象使用下列代码来禁止硬件加速:

//view关闭硬件加速
view.setLayerType(LAYER_TYPE_SOFTWARE, null);  

事实上,view.setLayerType(LAYER_TYPE_SOFTWARE, null)这个方法的作用并不是关闭硬件加速,只是当它的参数为LAYER_TYPE_SOFTWARE的时候,可以顺便把硬件加速关掉而已;并且除了这个方法外,Android并没有提供专门的View级别的硬件加速开关,所以它就顺便成了一个开关硬件加速的方法。

//view开启硬件加速
view.setLayerType(LAYER_TYPE_HARDWARE, null); 

判断一个View对象是否被硬件加速

有些时候,知道当前的View对象(尤其是自定义View)是否被硬件加速对应用程序来说是非常有用的。如果应用程序做了很多定制的绘图操作,并且不是所有的操作都会被新的渲染管道所支持,那么这种判断就特别有用。

有两种不同的方法来检查应用程序是否被硬件加速了:

  • View.isHardwareAccelerated():如果View对象被绑定在硬件加速的Window,则返回true
  • Canvas.isHardwareAccelerated():Canvas对象被硬件加速,则返回true

如果有必要在绘制代码中做这种检查,那么在可能的情况下,要使用Canvas.isHardwareAccelerated() 方法来代替 View.isHardwareAccelerated() 方法。这是由于,当一个 View 对象跟一个被硬件加速的窗口绑定的时候,它依然能够使用使用一个非硬件加速的Canvas对象。例如,把一个View对象绘制到缓存中的一个位图时就会发生这种情况。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值