[转]Android中不被硬件加速支持的操作

开启硬件加速之后,Android中的2D渲染管道可以支持绝大部分常用的Canvas的绘画操作函数以及那些很少被使用的操作函数。所有的那些用来呈现Android中的应用程序的绘画操作、默认的部件和布局以及常见的高级视觉效果(比如反射和纹理)都被支持。以下列表是已知的不被硬件加速所支持的操作:
* Canvas
     ** clipPath()
     ** clipRegion()
     ** drawPicture()
     ** drawTextOnPath()
     ** drawVertices()
* Paint
     ** setLinearText()
     ** setMaskFilter()
     ** setRasterizer()
* Xfermodes
     ** AvoidXfermode
     ** PixelXorXfermode

而且,有些操作的效果在硬件加速之后会有变化。
* Canvas
     ** clipRect(): XOR, Difference 和 ReverseDifference 这三种裁剪模式被忽略。3D转换不适用于修剪矩形
     ** drawBitmapMesh(): 颜色矩阵被忽略
* Paint
     ** setDither(): 被忽略
     ** setFilterBitmap(): 过滤一直处于开启状态
     ** setShadowLayer(): 只能和文字一起使用
* PorterDuffXfermode
     ** PorterDuff.Mode.DARKEN 等价于 SRC_OVER 如果帧缓冲区不支持混合
     ** PorterDuff.Mode.LIGHTEN 等价于 SRC_OVER 如果帧缓冲区不支持混合
     ** PorterDuff.Mode.OVERLAY 等价于 SRC_OVER 如果帧缓冲区不支持混合
* ComposeShader
     ** ComposeShader 仅能包含不同类型的着色器(比如包含一个 BitmapShader 的实例和一个 LinearGradient的实例是允许的,包含两个 BitmapShader 的实例却是不行的)
     ** ComposeShader 不能包含一个 ComposeShader

如果你的应用程序使用了以上不被支持或者是受限制的操作,你可以在使用了上述操作的View中调用setLayerType(View.LAYER_TYPE_SOFTWARE, null)来关闭硬件加速。这样,你的程序在其他的地方依然可以享受硬件加速带来的好处。

时间: 2024-10-09 18:05:42

[转]Android中不被硬件加速支持的操作的相关文章

[转]Android中attrs.xml文件的使用详解

转自:http://blog.csdn.net/jiangwei0910410003/article/details/17006087 Android中在values中定义一个attrs.xml,然后自己定义一个组件MyView attrs.xml内容如下: [html] view plaincopy <?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleabl

[转]Android中px dpi dip density densityDpi 的相关说明

概念解释 名词 解释 Px (Pixel像素) 不同设备显示效果相同.这里的“相同”是指像素数不会变,比如指定UI长度是100px,那不管分辨率是多少UI长度都是100px.也正是因为如此才造成了UI在小分辨率设备上被放大而失真,在大分辨率上被缩小. Screen Size (屏幕尺寸) 一般所说的手机屏幕大小如1.6英寸.1.9英寸.2.2英寸,都是指的对角线的长度,而不是手机面积.我们可以根据勾股定理获取手机的宽和长,当然还有面积. Resolution (分辨率) 指手机屏幕垂直和水平方向

[转]Lua中的元表与元方法

前言 元表对应的英文是metatable,元方法是metamethod.我们都知道,在C++中,两个类是无法直接相加的,但是,如果你重载了“+”符号,就可以进行类的加法运算.在Lua中也有这个道理,两个table类型的变量,你是无法直接进行“+”操作的,如果你定义了一个指定的函数,就可以进行了.那这篇博文就是主要讲的如果定义这个指定的函数,这个指定的函数时什么?希望对学习Lua的朋友有帮助. Lua是怎么做的? 通常,Lua中的每个值都有一套预定义的操作集合,比如数字是可以相加的,字符串是可以连

[转]Lua中的面向对象实现方法

面向对象不是针对某一门语言,而是一种思想,在面向过程的语言也可以使用面向对象的思想来进行编程.在Lua中,并没有面向对象的概念存在,没有类的定义和子类的定义,但同样在Lua中可以利用面向对象的思想来实现面向对象的类继承. 一.复制表的方式面向对象 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45

Android应用程序UI硬件加速渲染的预加载资源地图集服务(Asset Atlas Service)分析

我们知道,Android系统在启动的时候,会对一些系统资源进行预加载.这样不仅使得应用程序在需要时可以快速地访问这些资源,还使得这些资源能够在不同应用程序之间进行共享.在硬件加速渲染环境中,这些预加载资源还有进一步优化的空间.Android系统提供了一个地图集服务,负责将预加载资源合成为一个纹理上传到GPU去,并且能够在所有的应用程序之间进行共享.本文就详细分析这个预加载资源地图集服务的实现原理. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! 资源预加载

Android应用程序UI硬件加速渲染环境初始化过程分析

在Android应用程序中,我们是通过Canvas API来绘制UI元素的.在硬件加速渲染环境中,这些Canvas API调用最终会转化为Open GL API调用(转化过程对应用程序来说是透明的).由于Open GL API调用要求发生在Open GL环境中,因此在每当有新的Activity窗口启动时,系统都会为其初始化好Open GL环境.这篇文章就详细分析这个Open GL环境的初始化过程. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! Open

Android应用程序UI硬件加速渲染技术简要介绍和学习计划

Android系统的流畅性一直被拿来与iOS比较,并且认为不如后者.这一方面与Android设备硬件质量参差不齐有关,另一方面也与Android系统的实现有关.例如在3.0前,Android应用程序UI绘制不支持硬件加速.不过从4.0开始,Android系统一直以"run fast, smooth, and responsively"为目标对UI进行优化.本文对这些优化进行简要介绍和制定学习计划. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注!

Android应用程序UI硬件加速渲染的Display List构建过程分析

在硬件加速渲染环境中,Android应用程序窗口的UI渲染是分两步进行的.第一步是构建Display List,发生在应用程序进程的Main Thread中:第二步是渲染Display List,发生在应用程序进程的Render Thread中.Display List是以视图为单位进行构建的,因此每一个视图都对应有一个Display List.本文详细分析这些Display List的构建过程. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! 这里说的D

Android应用程序UI硬件加速渲染的Display List渲染过程分析

在硬件加速渲染环境中,Android应用程序窗口的UI渲染是分两步进行的.第一步是构建Display List,发生在应用程序进程的Main Thread中:第二步是渲染Display List,发生在应用程序进程的Render Thread中.Display List的渲染不是简单地执行绘制命令,而是包含了一系列优化操作,例如绘制命令的合并执行.本文就详细分析Display List的渲染过程. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! 从前面An