一直以来,在使用ObjectAnimator等Animator的时候, animator的Target一般都是直接设置为某个View,常规都是这么用,通过Animator的不断的改变 target view的属性,从而实现动画, 今天发现了一种非常规的用法,比如一个奇葩的需求或者场景, 有两个view,对于view1 要求scale效果,对于view2要求alpha效果,常规可以给这两个view分别搞两个Animator,分别改变scale和alpha,而target分别就是view1和view2, 其实完全可以搞一个类C, 这个类有setScale和setAlpha的方法,而在setScale的方法里面真正的调用view1的setScale,而setAlpha的方法里真正调用view2的setAlpha方法,外面只需要一个ObjectAnimator, 这个Animator的target就是C类型的对象,这样一个Animator就可以调节两个view了,注意ObjectAnimator运作的前提是其所要实现的动画所调整的属性的 set/get方法都在target里实现了,项目里使用这个技法的原因是将原来一堆view组成的一个复合view换成一个view,所有原来通过view组合实现视觉效果都直接draw出来,而原来某些animator的调用的code则不用改变,只需用这种方法将新的view包起来,animator在动画过程中调用了setXXX的时候会将整个view invalidate 以实现animator效果.
Animator的setTarget()接受Object类型参数,就隐含了这个意思.