Android 属性动画

属性动画

介绍

属性动画本质就是动态改变View的属性。
PS:属性动画不仅可以改变View的属性。只要是一个对象的属性,有set/get方法,就可以动态的去变化。

ObjectAnimator

ObjectAnimator类是将属性动画操作简化的一个类。
最常见用法:

//将view的tranlationX属性,在2000ms从0变化到100
ObjectAnimator.ofFloat(view,"translationX",0,100)
        .setDuration(2000)
        .start();

ObjectAnimator方法有ofInt、ofFloat、ofObject等方法,传入一个Object对象,一个对象的属性,数值变化范围(如0-100-1000),就会主动调用Object的Set方法不断去设置属性。设置之后调用更新方法(如View的重绘方法等)
XML:

<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
                android:duration="2000"
                android:propertyName="translationX"
                android:valueFrom="0"
                android:valueTo="100"
                android:valueType="floatType">
</objectAnimator>

JAVA引用XML文件方法

Animator animator = AnimatorInflater.loadAnimator(context, R.animator.tranlation_animator);
animator.setTarget(view);
animator.start();

AnimatorSet

动画集,关联多个Animator动画。

//以下动画播放顺序,1->(2,3)->4
AnimatorSet set = new AnimatorSet();
set.play(2).with(3).before(1).after(4);
//动画5在1000ms后播放。
set.play(5).after(1000);
set.setDuration(2000);
set.start();

ValueAnimator(重点)

ValueAnimator是ObjectAnimator的父类,它相当于只提供了一个数据变化的功能。需要自己去实现数据变化时,具体要执行的操作。大多数时候,我们自定义一些特殊的动画的时候,都是使用ValueAnimator类。
常见用法

ValueAnimator animator = ValueAnimator.ofFloat(0,100);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator animation) {
        float value = (float)animation.getAnimatedValue();
    	//数值更新时进行的操作。
    }
});
animator.setDuration(2000);

动画监听

以上几种类型的动画都支持设置此监听

animator.addListener(new Animator.AnimatorListener() {
    @Override
    public void onAnimationStart(Animator animation) {
        //动画开始监听
    }

    @Override
    public void onAnimationEnd(Animator animation) {
    	//动画结束监听
    }

    @Override
    public void onAnimationCancel(Animator animation) {
    	//动画取消监听
    }

    @Override
    public void onAnimationRepeat(Animator animation) {
    	//动画重复播放监听
    }
});

TypeEvaluator

上一篇:error C2065: “CString”: 未声明的标识符


下一篇:游戏编程模式之组件模式