在开发Android的Animator时遇到如下问题:

1. 关于Animator的循环播放:

在Animator动画中有循环的设置方法setRepeatCount(ValueAnimator.INFINITE) , 而对于AnimatorSet需要实现循环播放,实现方法如下代码:

privateAtomicBooleanisStart=newAtomicBoolean(false);


animatorSet.addListener(newAnimator.AnimatorListener(){@OverridepublicvoidonAnimationStart(Animatoranimation){}@OverridepublicvoidonAnimationEnd(Animatoranimation){if(isStart.get()){animation.start();}}@OverridepublicvoidonAnimationCancel(Animatoranimation){}@OverridepublicvoidonAnimationRepeat(Animatoranimation){}});animatorSet.start();publicvoidstopRecognizerViewAnim(){isStart.set(false);}


2 . 关于View的缩放:

对于View的缩放一般使用scale。如果缩放的是GroupView,则内部的组件也随着缩放。如果不希望缩放内部的view,而仅仅是宽度或高度的缩放, 实现方法如下代码:


mAnimatorSet=newAnimatorSet();ValueAnimatorheight=ValueAnimator.ofObject(newWidthEvaluator(),mCurrWidth,mPreWidth);height.setDuration(DURATION);mAnimatorSet.playTogether(height);mAnimatorSet.addListener(newAnimator.AnimatorListener(){@OverridepublicvoidonAnimationStart(Animatoranimation){}@OverridepublicvoidonAnimationEnd(Animatoranimation){}@OverridepublicvoidonAnimationCancel(Animatoranimation){}@OverridepublicvoidonAnimationRepeat(Animatoranimation){}});mAnimatorSet.start();


privateclassWidthEvaluatorextendsIntEvaluator{@OverridepublicIntegerevaluate(floatfraction,IntegerstartValue,IntegerendValue){intvalue=super.evaluate(fraction,startValue,endValue);ViewGroup.LayoutParamslayoutParams=getLayoutParams();layoutParams.width=value;setLayoutParams(layoutParams);returnvalue;}}


3. 如果同一个AnimatorSet中多个Animator需要设置before() 或者after() ,不能再同一个AnimatorSet中设置多个before() 或者after()。例如: play(AAnimator).before(BAnimator).before(CAnimator).. 是错误的。 这个是我个人的理解,如果不正确,请留言告知。