我是这样使用ViewPropertyAnimator的:
view.animate().alpha(to).setDuration(duration);和ValueAnimator:
ValueAnimator anim = ValueAnimator.ofInt(0, width);
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
viewGroup.setMinimumWidth((Integer) valueAnimator.getAnimatedValue());
}
});
anim.setDuration(duration).start();有时我想在动画完成之前取消它,但是仍然立即应用剩下的步骤(就好像动画已经完成了一样)。是否有一种简单的方法可以使用API来完成这一任务,还是我需要将动画器封装到另一个类中并自己处理呢?
发布于 2015-11-07 17:22:33
停止运行动画有两种方法。
Animator.end() // end the animation
Animator.cancel() // cancel the animation您可以使用end()方法或cancel()方法。在这两种情况下,动画都将停止,只能通过调用start()重新启动。
end()和cancel()之间的区别在于在调用该方法之后动画对象将处于何种状态。
当调用cancel()时,动画将停止运行,使动画对象处于中间状态。
调用end()方法时,动画将有效地被快速转发到动画的最后状态.
所有的对象都会以动画结尾的方式出现。
来源:http://cogitolearning.co.uk/?p=1482
发布于 2015-11-07 17:26:56
为此,您可以使用AnimatorListener。
anim.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {}
@Override
public void onAnimationEnd(Animator animation) {}
@Override
public void onAnimationCancel(Animator animation) {
// Set view properties here as if the animation had completed
viewGroup.setMinimumWidth(...);
}
@Override
public void onAnimationRepeat(Animator animation) {}
});发布于 2015-11-22 15:11:15
如果您不介意使用第三方库,那么可以使用android-过渡:
导入Gradle中的库:编译‘com.github.kaichunlin.Transform:core:0.9.2’
您的ViewPropertyAnimator场景将变成
TransitionAnimation animation =
ViewTransitionBuilder.transit(view).alpha(to).duration(duration).buildAnimation();您的ValueAnimator场景将变成
final int width = <width>;
TransitionAnimation animation =
ViewTransitionBuilder.transit(viewGroup).duration(duration).addTransitionHandler(new TransitionHandler() {
@Override
public void onUpdateProgress(TransitionController controller, View target, float progress) {
target.setMinimumWidth((int) (progress*width));
}
}).buildAnimation();然后调用animation.startAnimation();启动,animation.endAnimation();调用结束动画并应用最终状态。
这个库的优点是,在需要混合不同类(即ViewPropertyAnimator和ValueAnimator)的情况下,可以使用单个概念/类,并且动画状态/进度可以绑定到UI状态,就像提取抽屉的数量一样。
https://stackoverflow.com/questions/33585480
复制相似问题