Android动画浅谈(二)

之前只是简单的讲了讲Android动画当方面一些基础、定义之类的,今天讲一讲一些比较具体的应用场景。主要是动画的监听,对动画的监听和其他事件的监听一样,都是使用添加Listener的形式,利用listener进行监听,一般主要使用的监听有两个,Animator.AnimatorListener和AnimatorListenerAdapter,两者的差别在于使用的时候AnimatorListenerAdapter可以直接实现一种监听事件就使用(onAnimationStart (动画开始),onAnimationEnd (动画结束),onAnimationCancel (动画取消),onAnimationRepeat (动画重复)),适合用于只需要监听动画事件中的一种时使用,比较方便快捷。例如,以下是对动画animatorSet进行动画开始的监听,

animatorSet.addListener(new AnimatorListenerAdapter() {
    @Override
    public void onAnimationStart(Animator animation) {
        super.onAnimationStart(animation);
    }
});

而使用Animator.AnimatorListener需要实现以上四种事件的全部事件(即使是空实现也行),适合用于需要监听多种事件的场景。例如,是对动画animatorSet进行动画的监听

animatorSet.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) {
        }
});

在平时工作时大多数人习惯使用后面的方式,以便为后来的人预留好位置(个人看法)。

需要注意的是,由于动画的执行需要时间,但是在动画执行的这段时间内,通常会允许人们进行其他的操作,其中可能包括会需要我们将原本正在执行的动画取消的操作,所以这个时候我们需要手动的取消原本还在执行的动画。例如,以下是对一个缩放动画的监听(动画此处省略)

mScaleAnim.addListener(new Animator.AnimatorListener() {
    @Override
    public void onAnimationStart(Animator animation) {
        Log.d("Animdeom", "onAnimationStart: ");
    }

    @Override
    public void onAnimationEnd(Animator animation) {
        Log.d("Animdeom", "onAnimationEnd: ");
    }

    @Override
    public void onAnimationCancel(Animator animation) {
        Log.d("Animdeom", "onAnimationCancel: ");
    }

    @Override
    public void onAnimationRepeat(Animator animation) {
        Log.d("Animdeom", "onAnimationRepeat: ");
    }
});
mScaleAnim.start();

这里需要注意的是,一定要先给动画添加监听再开启动画,不然可能会有动画的某些事件没有监听到的现象。如图所示,该动画的开始、结束、取消、重复状态都会打印相应的状态。

 

如上图所示,正常的情况下动画正常执行完只有开始(start)和结束(end)两个状态会被监听到。当我们需要取消动画时,调用的是动画的cancel()方法,调用cancel()方法的时候首先会执行坚挺的onAnimatorCancel(),这个时候同样需要注意的是,触发完了动画的cancel()方法后,依旧会触发动画的onAnimtorEnd()监听,cancel()只是把动画直接调整到动画的最后一帧而已,然后调用动画的onAnimtorEnd()监听。

如上图所示,该情况是动画开始后调用动画的cancel()方法后动画的执行流程。除了以上的监听,动画还有pause的监听,这里九九暂不介绍了。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值