当前位置: 首页 > 工具软件 > View Animator > 使用案例 >

animator android,Android动画Animator开发问题

司雅畅
2023-12-01

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

1. 关于Animator的循环播放:

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

animatorSet.addListener(new Animator.AnimatorListener() {

@Override

public void onAnimationStart(Animator animation) {

}

@Override

public void onAnimationEnd(Animator animation) {

if (isStart.get()) {

animation.start();

}

}

@Override

public void onAnimationCancel(Animator animation) {

}

@Override

public void onAnimationRepeat(Animator animation) {

}

});

animatorSet.start();

public void stopRecognizerViewAnim() {

isStart.set(false);

}

2 . 关于View的缩放:

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

mAnimatorSet = new AnimatorSet();

ValueAnimator height = ValueAnimator.ofObject(new WidthEvaluator(), mCurrWidth, mPreWidth);

height.setDuration(DURATION);

mAnimatorSet.playTogether(height);

mAnimatorSet.addListener(new Animator.AnimatorListener() {

@Override

public void onAnimationStart(Animator animation) {

}

@Override

public void onAnimationEnd(Animator animation) {

}

@Override

public void onAnimationCancel(Animator animation) {

}

@Override

public void onAnimationRepeat(Animator animation) {

}

});

mAnimatorSet.start();

private class WidthEvaluator extends IntEvaluator {

@Override

public Integer evaluate(float fraction, Integer startValue, Integer endValue) {

int value = super.evaluate(fraction, startValue, endValue);

ViewGroup.LayoutParams layoutParams = getLayoutParams();

layoutParams.width = value;

setLayoutParams(layoutParams);

return value;

}

}

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

 类似资料: