美文网首页
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