专栏名称: 张风捷特烈
海的彼岸,有我未曾见证的风采。
目录
相关文章推荐
阜阳新闻网  ·  微博深夜宣布:即日起解散 ·  8 小时前  
大众新闻-大众日报  ·  微博最新公告 ·  10 小时前  
大众新闻-大众日报  ·  微博最新公告 ·  10 小时前  
津云  ·  微博最新公告:解散相关运动员超话! ·  17 小时前  
津云  ·  微博最新公告:解散相关运动员超话! ·  17 小时前  
新浪体育  ·  国足花国家的钱了吗? ·  2 天前  
掌中淄博  ·  郭艾伦,宣布退出! ·  2 天前  
掌中淄博  ·  郭艾伦,宣布退出! ·  2 天前  
51好读  ›  专栏  ›  张风捷特烈

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

张风捷特烈  · 简书  ·  · 2018-09-17 10:33

正文

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


一、AnimatorSet的使用

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

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

关系图.png
在延迟一秒后,进行translationX动画伴随alpha动画,然后scaleX(),scaleY()同时执行
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的接口,用于更新时回调

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

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

动画监听.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);

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

暂停监听.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);

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







请到「今天看啥」查看全文


推荐文章
阜阳新闻网  ·  微博深夜宣布:即日起解散
8 小时前
大众新闻-大众日报  ·  微博最新公告
10 小时前
大众新闻-大众日报  ·  微博最新公告
10 小时前
新浪体育  ·  国足花国家的钱了吗?
2 天前
掌中淄博  ·  郭艾伦,宣布退出!
2 天前
掌中淄博  ·  郭艾伦,宣布退出!
2 天前
心理测试  ·  有人偷偷爱着你。
7 年前