国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > php开源 > 综合技术 > Android动画----ValueAnimator

Android动画----ValueAnimator

来源:程序员人生   发布时间:2017-04-07 11:20:13 阅读次数:4554次

引言

  关于Android动画的内容,我们已讲了好几篇了,都是1些最基础的,包括Alpha、Translate、Rotate、Scale都是常见的补间动画(Tween Animation),属于视图动画(包括补间动画和帧动画),今天我们来学习另外一种类型,属性动画,主角是ValueAnimator。
  那末肯定有人会疑惑视图动画和属性动画有甚么区分?那就看下面我对这两种动画的理解:
  

  • 视图动画:只改变控件的显示效果和显示位置,不改变控件本身的属性。
  • 属性动画:改变控件的某1属性,从而实现控件的展现的动画效果。

ValueAnimator

  ValueAnimator也是继承自Animator类,它本质是提供了1个时间的引擎去提供1系列变化的值并将其值赋值与目标控件上。

ValueAnimator xml实现方式

  这里是1个简单的使用xml来实现ValueAnimator的方式
  第1步,在res文件下新建animator文件夹,并在animator文件夹下新建valueanimator.xml文件,目录结构以下图所示:
  这里写图片描述
  第2步,编写valueanimator.xml文件内容:以下

<?xml version="1.0" encoding="utf⑻"?>
<animator xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="10000"
    android:valueFrom="0"
    android:valueTo="100"
    android:valueType="intType"
    android:repeatCount="0"
    android:interpolator="@android:anim/linear_interpolator"
    android:repeatMode="reverse"/>

  第3步,实例化valueanimator
  

private ValueAnimator valueAnimator;  //声明动画对象
……
valueAnimator = (ValueAnimator)AnimatorInflater.loadAnimator(this,R.animator.valueanimator); //实例化
/*AnimatorInflator 是Andorid 提供的属性动画帮助类*/

  第4部,添加动画监听

valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator valueAnimator) {
              int value = (Integer)valueAnimator.getAnimatedValue(); //获得动画的值
              mTVValue.setText(value+""); //把值设为控制的值,nTVValue是1个TextView
            }
        });

  第5步,开始动画

valueAnimator.start();

ValueAnimator 代码实现方式

  第1步,声明对象,并实例化
  

private ValueAnimator valueAnimator;
……
valueAnimator = new ValueAnimator();

  第2步,设置相干参数

valueAnimator.setIntValues(0,100);
valueAnimator.setDuration(10000);
valueAnimator.setInterpolator(new LinearInterpolator());

  第3步,添加动画监听
  

valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator valueAnimator) {
              int value = (Integer)valueAnimator.getAnimatedValue();
              mTVValue.setText(value+"");
            }
        });

  第4步,履行动画

valueAnimator.start();

动画效果

先简单的看1下动画效果
这里写图片描述

这算是最简单基础的ValueAnimator的用法。使用流程基本如此,其它也基本是在这个流程上做扩充,在使用的进程中可以自行了解1下。

ValueAnimator中经常使用函数说明

void addUpdateListener(ValueAnimator.AnimatorUpdateListener listener)  //动画值监听函数

void cancel() //取消动画

void end() //结束动画

static ValueAnimator    ofArgb(int... values)//色彩动画构造函数

static ValueAnimator    ofFloat(float... values)//浮点动画构造函数

static ValueAnimator    ofInt(int... values) //整型动画构造函数

static ValueAnimator    ofObject(TypeEvaluator evaluator, Object... values) //对象动画构造函数

static ValueAnimator    ofPropertyValuesHolder(PropertyValuesHolder... values) //不知道怎样翻译

void    setEvaluator(TypeEvaluator value) //设置值计算器

void    setInterpolator(TimeInterpolator value) //设置插值器

void    pause()//暂停动画

void    resume() //恢复动画
//

色彩动画示例

示例代码:

xml

<?xml version="1.0"  encoding="utf⑻"?>
<animator
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="10000"
    android:valueFrom="#ffff0000"
    android:valueTo="#ffffffff"
    android:valueType="colorType"
    />

监听器

colorValueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator valueAnimator) {
                int color = (Integer)valueAnimator.getAnimatedValue();
                mTVValue.setBackgroundColor(color);
            }
        });

效果
这里写图片描述

对象动画示例

Javacode

 /*代码实现对象动画*/
        objectValueAnimator = ValueAnimator.ofObject(new MyAnimObjectEvaluator(),new MyAnimObject(0),new MyAnimObject(10));
        objectValueAnimator.setDuration(10000);
        objectValueAnimator.setInterpolator(new LinearInterpolator());
/*对象动画*/
    class MyAnimObject{

        int value;

        public MyAnimObject(int value){
            this.value = value;
        }
    }
    /*对象动画算值器*/
    class MyAnimObjectEvaluator implements TypeEvaluator<MyAnimObject>{

        @Override
        public MyAnimObject evaluate(float v, MyAnimObject myAnimObject, MyAnimObject t1) {
            int oldValue = myAnimObject.value;
            int newValue = t1.value;

            int res = (int)((oldValue + newValue)*v)*2;  //返回偶数
            MyAnimObject animObject = new MyAnimObject(res);
            return animObject;
        }
    }

监听器

objectValueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator valueAnimator) {
                MyAnimObject value = (MyAnimObject)valueAnimator.getAnimatedValue();
                mTVValue.setText(value.value);

            }
        });

效果:
这里写图片描述

结尾

关于ValueAnimator的基础学习,这篇博客就先到这里,关于本篇博客用到动画值计算器和插值器,会在下篇博客进行专门讲授。

生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生