Android动画Animator开发问题
在开发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).. 是错误的。 这个是我个人的理解,如果不正确,请留言告知。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。