前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >D10-Android自定义控件之动画篇2-动画监听

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

作者头像
张风捷特烈
发布2018-09-29 11:28:24
4100
发布2018-09-29 11:28:24
举报

本篇接上一篇: 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);

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

更新监听.gif

mTranslationX.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator animation) {
        mCircleR = (Float) animation.getAnimatedValue();
        invalidate();
    }
});

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


后记、
1.声明:

1本文由张风捷特烈原创,转载请注明

2欢迎广大编程爱好者共同交流

3个人能力有限,如有不正之处欢迎大家批评指证,必定虚心改正

4你的喜欢与支持将是我最大的动力

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.09.17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、AnimatorSet的使用
    • 在此之前先看一下AnimatorSet、Animator、ObjectAnimator、ValueAnimator的关系
      • 在延迟一秒后,进行translationX动画伴随alpha动画,然后scaleX(),scaleY()同时执行
      • 二、动画的监听:
        • 1、Animator.AnimatorListener:动画监听
          • 2、AnimatorPauseListener:动画暂停监听
            • 3、AnimatorUpdateListener
            • 后记、
              • 1.声明:
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档