使用硬件加速,提高Android的动画性能
来源:互联网 发布:软件测试经理招聘 编辑:程序博客网 时间:2024/06/05 04:57
4 最初使用动画时,在低性能手机上显示效果会很不好,尤其是有复合动画时。
在绘制动画时,你的view需要重绘每一层,如果你使用视图图层代替重绘,视图渲染只会渲染一次并会被重用。使用硬件加速会让动画绘制的更快,因为硬件会把图层缓存在GPU上。
用法
用法很简单关键方法是View.setLayerType()
- 在开始动画时调用
View.setLayerType(View.LAYER_TYPE_HARDWARE, null)
- 运行动画
- 动画结束时调用
View.setLayerType(View.LAYER_TYPE_NONE, null).
代码示例
// 设置硬件加速 myView.setLayerType(View.LAYER_TYPE_HARDWARE, null);// 设置动画ObjectAnimator animator = ObjectAnimator.ofFloat(myView, View.TRANSLATION_X, 150);// 设置一个回调,在动画完成时取消硬件加速animator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { myView.setLayerType(View.LAYER_TYPE_NONE, null); }});// 开始动画animator.start();
如果你的sdk版本在14以上你可以使用属性动画,可以更简洁的设置硬件加速,调用withLayer()
myView.animate() .translationX(150) .withLayer() .start();
注意
硬件加速可以提高动画的性能,但是切记不要滥用!
- 在某些情况下,硬件层会比普通view绘制多做很多的工作。缓存一个层到GPU需要花费一些时间,因为需要两个步骤:首先view绘制到GPU的一个层中,然后GPU再把这个层绘制到window上。如果只是简单的view绘制使用硬件加速会增加不必要的开销
- 与所有的缓存一样,GPU的硬件缓存也一样会有失败的几率。如果在动画进行中调用
View.invalidate()
的话,缓存的层会不得不重新渲染。如果不断有无效的硬件层产生的话,还不如不使用硬件加速。因为增加硬件层缓存会增加额外的开销。
例子
我做了一个Demo,包括简单动画,复合动画,开启硬件加速等。以下是在各种情况下的GPU绘制情况(需在开发者选项中开启GPU呈现模式),需要注意的是一定要选一个性能较差的手机。GitHub地址:https://github.com/q960757274
简单动画不开启硬件加速
简单动画开启硬件加速
复合动画开启硬件加速
1 0
- 使用硬件加速,提高Android的动画性能
- android中动画的硬件加速
- 使用CSS3开启GPU硬件加速提升网站动画渲染性能
- 使用CSS3开启GPU硬件加速提升网站动画渲染性能
- 使用CSS3开启GPU硬件加速提升网站动画渲染性能
- 使用CSS3开启GPU硬件加速提升网站动画渲染性能
- 使用CSS3开启GPU硬件加速提升网站动画渲染性能
- Android 4.0硬件加速的使用
- 通过硬件层提高Android动画的性能
- 通过硬件层提高Android动画的性能
- 使用 FLIP 来提高 Web 动画的性能
- Android应用程序UI硬件加速渲染的动画执行过程分析
- Android中使用硬件加速的技巧
- Android的硬件加速
- Android 硬件加速的优缺点
- Android的硬件加速
- Android的硬件加速
- Android的硬件加速
- 动态规划求最长递增子序列
- DB2死锁问题与日常维护
- 关于工资的秘密
- lightoj - 1033 - Generating Palindromes - dp/ 最长公共子序列lcs
- 阿里巴巴校招内推一面总结
- 使用硬件加速,提高Android的动画性能
- php如何创建验证码
- JNI相关
- win10安装net framework 3.5一直失败的解决办法
- zabbxi
- 用excel画坐标散点图,并添加数据标签
- Unity 问题汇总
- XmlPullParserException:<vector> tag requires viewportWidth > 0
- 图示经典算法--自顶向下的归并排序