Android在3.0引入了一个新的package(android.animation),顾名思义是关于动画的。它与之前版本中的动画有很大区别的(android.view.animation),具体区别官方教程都有描述(可能需要翻墙 )。
今天看到了一篇blog()是讲View动画的性能优化的。这里指的View动画是指用ObjectAnimator来实现的View动画,也就是Property Animation。
作者的分析深入简出,提出了影响动画性能的三个因素:
1、property的setter/getter是通过reflection或者jni来是实现的,如果知道Object的setter/getter方法可以直接调用,节省性能;
2、多个animator并行执行。通过定义多个ObjectAnimator,然后通过AnimatorSet的playTogether接口来调用。这个可以通过ViewPropertyHolder将需要多个animator优化为只需要一个animator来实现。同样节省了性能;
3、在ObjectAnimator中,View的每个属性被修改后会调用invalidate()让container进行重绘。这样如果一个ObjectAnimator动画同时修改x,y的话,会invalidate两次。新的系统中View增加了一个animate方法,返回一个ViewPropertyAnimator,它通过ObjectAnimator对View进行了封装,针对以上两个性能优化点进行了优化。它直接调用View的setX、setAlpha等方法设置property;另外,它会在一次valueupdate回调中同时设置x,y的值然后再调用invalidate,这样就减少了重绘的频率。