Android ViewPropertyAnimator和ValueAnimator:我怎样才能快进?

时间:2015-11-07 17:14:41

标签: android android-animation

我正在使用ViewPropertyAnimator:

var reqItem = $('.oitm:visible');

和ValueAnimator:

view.animate().alpha(to).setDuration(duration);

有时我想在完成动画之前取消动画,但仍然立即应用剩下的步骤(就好像动画已经完成)。是否有一种使用API​​实现此目的的简单方法,或者我是否需要将Animators包装在另一个类中并自己处理?

3 个答案:

答案 0 :(得分:2)

有两种方法可以停止正在运行的动画。

Animator.end()     // end the animation
Animator.cancel()  // cancel the animation

您可以使用end()方法或cancel()方法。在这两种情况下,动画都会停止,只能通过调用start()重新启动 end()cancel()之间的差异是调用方法后动画对象所处的状态。
调用cancel()时,动画将停在其轨道中,使动画对象处于中间状态
调用end()方法时,动画将有效地快速转发到动画的最终状态。

所有对象都将以动画结束时的方式显示。

来源:http://cogitolearning.co.uk/?p=1482

答案 1 :(得分:0)

您可以使用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) {}
});

答案 2 :(得分:-1)

如果您不介意使用第三方库,则可以使用android-transition

在Gradle中导入库: 编译' com.github.kaichunlin.transition:核心: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状态相关联抽屉被抽出多少钱。