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进行加速。
animator.start();?
?
4?Android 4.0提示和技巧
切换到硬件加速2D图形可以立即增强表现,但是你还是需要通过如下的建议来设计你的应用程序来更有效率的使用GPU。
4.1 减少你程序中使用View的数量
你系统中画的view的数量越多,你的程序就会越慢,在软件绘制的流程也是一样的,减少view的数量是优化你UI的一个最简单的方法。
4.2 避免过多绘制
不要过多的叠加层,当一个View被其他view完全遮挡住了的话,最好把被遮挡的view移除掉。如果你需要绘制不同的层做一个叠加效果的话,考虑把这些层合并为一个层。就现在的硬件来看,有一个好的经验就是动画的每帧不要绘制多余屏幕像素2.5倍的像素数量(bimap中的透明像素也计算在内)。
4.3 不要在绘制的方法中创建绘制对象
一个常见的错误就是当绘制方法被调用的时候,每次都要创建一个新的Paint或者Path。这将迫使垃圾回收器过于频繁的运行,这将对缓冲和硬件的绘制造成影响。
4.4 不要过于频繁的修改形状
以复杂的shapes,path和旋转为例,这些绘制都会用到纹理的遮罩。每当你创建或者修改一个path,硬件渲染过程都会创建一个新的遮罩,这耗费的代价是相当大的。
4.5 不要过于频繁的修改bitmap
每当修改一次bitmap的内容,当你下次再绘制它的时候都会以GPU的纹理形式上传一次。
4.6 要小心使用alpha通道
当你使用setAlpha ,AlphaAnimation或者ObjectAnimator设置一个View的透明效果时。它将需要2倍离屏的渲染缓冲填充率,当应用一个alpha到一个大的View上的时候,考虑设置view 层的类型为LAYER_TYPE_HARDWARE。
本文作者的微博为http://weibo.com/zuiniuwang 欢迎大家与他联系。
【51CTO.com独家特稿,非经授权谢绝转载,合作媒体转载请注明原文作者及出处!】
?
?
<!--EndFragment--><!--EndFragment-->?
<!--EndFragment-->?
<!--EndFragment-->?