D10-Android自定义控件之动画篇2-动画监听

本篇接上一篇:
AnimatorSet的使用,将多个Animator组合进行动画
动画的监听


一、AnimatorSet的使用

在此之前先看一下AnimatorSet、Animator、ObjectAnimator、ValueAnimator的关系

可见Animator是最上层的抽象类,定义了动画的基本操作,AnimatorSet、ValueAnimator作为子类,ObjectAnimator是ValueAnimator的子类

9414344-7601c0bf4be2b144.png
关系图.png
在延迟一秒后,进行translationX动画伴随alpha动画,然后scaleX(),scaleY()同时执行
9414344-c0fa0fb3ebf61270.gif
set动画集合.gif
AnimatorSet set = new AnimatorSet();
set
        .play(translationX())
        .with(alpha())
        .after(1000)
        .before(scaleX())
        .before(scaleY());
set.start();

二、动画的监听:

可见Animator有两个内部接口,Animator.AnimatorListener和Animator.AnimatorPauseListener。
AnimatorListenerAdapter是AnimatorListener和AnimatorPauseListener的实现者,其中实现方法为空,也就是一个适配器,相当于两个接口的功能和。
AnimatorUpdateListener是ValueAnimator的接口,用于更新时回调

9414344-0bbe61f3fdf9131d.png
监听接口关系.png
1、Animator.AnimatorListener:动画监听
   //动画开启时回调
    void onAnimationStart(Animator animation);
    //动画结束时回调
    void onAnimationEnd(Animator animation);
    //动画取消时回调
    void onAnimationCancel(Animator animation);
    //重复时回调
    void onAnimationRepeat(Animator animation);

动画效果如下:抬起手时取消动画

9414344-4b1cf4f4653e35e6.gif
动画监听.gif
mTranslationX = translationX();
mTranslationX.setRepeatMode(ValueAnimator.REVERSE);
mTranslationX.setRepeatCount(ValueAnimator.INFINITE);

mTranslationX.addListener(new Animator.AnimatorListener() {
    @Override
    public void onAnimationStart(Animator animation) {
        //开始时设为绿色
        setColor(Color.GREEN);
    }

    @Override
    public void onAnimationEnd(Animator animation) {
        //结束时设为蓝色
        setColor(Color.BLUE);
    }

    @Override
    public void onAnimationCancel(Animator animation) {
        //取消是大小变为50
        setCircleR(50);
    }

    @Override
    public void onAnimationRepeat(Animator animation) {
        //重复时设为随机色
        setColor(ColUtils.randomColor());
    }
});
mTranslationX.start();
 mTranslationX.cancel();//取消动画

2、AnimatorPauseListener:动画暂停监听
//暂停回调
void onAnimationPause(Animator animation);
//恢复回调
void onAnimationResume(Animator animation);

效果如下:点击运动,右滑暂停颜色变黄,下滑恢复颜色变蓝

9414344-badc83e9fa907bd7.gif
暂停监听.gif
mTranslationX.addPauseListener(new Animator.AnimatorPauseListener() {
    @Override
    public void onAnimationPause(Animator animation) {
        setColor(Color.YELLOW);//暂停黄色
    }
    @Override
    public void onAnimationResume(Animator animation) {
        setColor(Color.BLUE);//恢复蓝色
    }
});

3、AnimatorUpdateListener
//更新时回调
void onAnimationUpdate(ValueAnimator animation);

效果如下:每当更新是将半径和位移联动

9414344-099cd91715283c78.gif
更新监听.gif
mTranslationX.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator animation) {
        mCircleR = (Float) animation.getAnimatedValue();
        invalidate();
    }
});

下一篇将带来插值器与估值器的详细讲解


后记、

1.声明:

[1]本文由张风捷特烈原创,转载请注明
[2]欢迎广大编程爱好者共同交流
[3]个人能力有限,如有不正之处欢迎大家批评指证,必定虚心改正
[4]你的喜欢与支持将是我最大的动力

2.连接传送门:

更多安卓技术欢迎访问:安卓技术栈
我的github地址:欢迎star
张风捷特烈个人网站,编程笔记请访问:http://www.toly1994.com

3.联系我

QQ:1981462002
邮箱:1981462002@qq.com
微信:zdl1994328

4.欢迎关注我的微信公众号,最新精彩文章,及时送达:
9414344-c474349cd3bd4b82.jpg
公众号.jpg
原文地址:https://www.cnblogs.com/toly-top/p/9781875.html