美文网首页
Android自定义View(6) 《动画篇 属性动画 Valu

Android自定义View(6) 《动画篇 属性动画 Valu

作者: 非典型程序猿 | 来源:发表于2021-09-01 21:05 被阅读0次

    概述

    在Android中,我们需要利用已有的一些资源来完成一些炫酷的动画效果,那么此时我们就需要去熟悉Android已有的对动画的支持的API,今天总结一下Android动画中的第二种动画,属性动画

    属性动画简介

    在Android中,动画分为2大类,视图动画(View Animation)和属性动画(Object Animation),而属性动画又分为2类,ValueAnimator和ObjectAnimator。

    重点注意

    使用之前需要先记住,视图动画是不会改变控件原本的属性的,举个栗子,如果我们使用平移动画将一个按钮平移,且最后图像显示是平移后的位置,但其实实际的点击事件响应位置还是在原本位置,平移后的位置点击事件是无法响应的。这点是视图动画和属性动画最大的区别

    ValueAnimator

    首先我们在代码中来简单的实现一下,和视图动画一样,在播放完毕后一定要使用cancel()方法进行动画的关闭,否则会造成内存泄漏,关键代码如下,

        private void startValueAnim(){
            ValueAnimator animator ;
            if (binding.image.getLeft()>0){
                animator = ValueAnimator.ofInt(500,0);
            }else {
                animator = ValueAnimator.ofInt(0,500);
            }
            animator.setDuration(500);
            animator.setInterpolator(new BounceInterpolator());
            animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                @Override
                public void onAnimationUpdate(ValueAnimator animation) {
                    int currentValue = (int) animation.getAnimatedValue();
                     binding.image.layout(currentValue,currentValue,currentValue+binding.image.getWidth(),currentValue+binding.image.getHeight());
                }
            });
            animator.start();
        }
    

    先看一下运行结果


    value_anim.gif

    其实ValueAnimator的主要用途是自己来构建一个值变化的动画类,我们在监听值的变化时来对控件做对应的位置或者其他变换操作。

    ValueAnimator的几个重要构造方法

    • ValueAnimator ofInt(int... values)
    • ValueAnimator ofFloat(float... values)
      这俩呢,就主要是用在构造几个数值变换的动画中,比如我可以创建一个ValueAnimator,先从0变到400,再从400到200,再从200到500,那么我就只需要按如下方式创建
    ValueAnimator animator = ValueAnimator.ofInt(0,400,200,500);
    

    ValueAnimator的几个常用的方法

    • ValueAnimator setDuration(long duration) 设置动画时间
    • void setInterpolator(TimeInterpolator value) 设置插值器,控制动画速度
    • void setRepeatCount(int value) 动画重复次数
    • void setRepeatMode(int value) 动画重复方式
    • setStartDelay(long startDelay) 动画延迟播放的时间
    • Object getAnimatedValue() 获取当前播放的动画的值
      ...

    ValueAnimator的监听

    • addUpdateListener(AnimatorUpdateListener listener) 监听该动画值变化
    • void removeUpdateListener(AnimatorUpdateListener listener) 取消监听该动画值变化
    • void removeAllUpdateListeners() 取消该动画所有监听值变化
    • void addListener(AnimatorListener listener) 监听该动画的播放/结束/取消/重复状态
    • void removeListener(AnimatorListener listener) 取消该动画状态监听
    • void removeAllListeners() 取消该动画所有状态监听

    总结

    ValueAnimator对控件的属性修改主要还是靠自己来修改的,所以比较灵活,我们只要关心动画值即可,运用度还是比较高的。下一篇写一个简单的ValueAnimator的实际应用。

    相关文章

      网友评论

          本文标题:Android自定义View(6) 《动画篇 属性动画 Valu

          本文链接:https://www.haomeiwen.com/subject/hzooiltx.html