zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    linux下vim的安装及其设置细节
    vm虚拟机下ubuntu连接上ssr
    文件写入-结构体排序
    利用链表进行报数游戏
    链表——尾插法
    C#设计模式总结
    C#设计模式(20)——策略者模式(Stragety Pattern)
    Autofac在项目中应用的体会,一个接口多个实现的情况
    C#设计模式(1)——单例模式
    jquery.js与sea.js综合使用
  • 原文地址:https://www.cnblogs.com/toly-top/p/9781875.html
Copyright © 2011-2022 走看看