Android动画学习(四)之属性动画学习

本文详细介绍了Android属性动画的机制、API及基本使用,包括ValueAnimator、ObjectAnimator、AnimatorSet和PropertyValuesHolder的用法。通过实例演示了如何创建和使用属性动画,强调了属性动画对任意对象属性的控制能力,以及与补间动画的区别。最后讨论了Evaluator、Interpolator和ViewPropertyAnimator等高级特性,揭示了属性动画实现动画效果的本质。

Android动画学习(四)之属性动画学习

概述

属性动画是Android3.0版本推出的动画框架,其功能和拓展性都很强。从某种角度来看,属性动画是增强版的补
间动画。
与补间动画相比,属性动画的强大可以体现在如下两方面。

  • 补间动画只能定义View上控件在“透明度”、“旋转”、“缩放”、“位移” 4个方面的状态变化,但属性动画可以定义任何属性的变化。
  • 补间动画只能对 UI 组件执行动画,但属性动画几乎可以对任何对象执行动画。

属性动画实现主要由两方面组成:
①计算各帧的相关属性值;
②为指定对象设置这些计算后的值。

属性动画的机制

属性动画的机制已经不是再针对于View而进行设计的了,而是一种不断地对值进行操作的机制,它可以将值赋值到指定对象的指定属性上。
属性动画要求动画作用的对象提供该属性的set方法,苏弧形动画会根据你传递的该属性的初始值和最终值,以动画的效果多次调用set方法。每次传递个set方法的值东不一样,随着时间的推移,所传递的值越来越接近最终值。如果动画没有传递初始值,那么还要提供get方法,因为系统要去获取属性的初始值。

属性动画的的API

Animator :
它提供了创建属性动画的基类。通常该类只用于被继承并重写它的相关方法。比如自定义Animator 。

ValueAnimator :
属性动画主要的时间引擎,它负责计算各个帧的属性值。它定义了属
性动画的绝大部分核心功能,包括计算各帧的相关属性值,负责处理更新事件,按属
性值的类型控制计算规则。因此程序员必须根据 ValueAnimator 计算并监听值更新来更新对象的相关属性值。

ObjectAnimator :
它是 ValueAnimator 的子类,允许程序员对指定对象的属性执行动画。在实际应用中, ObjectAnimator 使用起来更加简单,因此更加常用。在少数场景下,由于 Object Animator 存在一些限制,可能需要考虑使用ValueAnimator 。

AnimatorSet :
它是Animator的子类,用于组合多个Animator , 并指定多个Animator是按次序播放,还是同时播放。

属性动画常用方法:

void start()   开始动画
void setDuration(long durationMillis) :设置持续时间(单位ms)
void setRepeatCount(int value):设置重复动画,设置为 0 表示不循环,设置为 ValueAnimation.INFINITE 表示无限循环
void setRepeatMode(int value):设置循环模式,取值为 ValueAnimation.RESTART 时,表示正序重新开始,当取值为 ValueAnimation.REVERSE 表示倒序重新开始。
addListener(AnimatorListener listener):设置监听动画过程
addPauseListener(Animator.AnimatorPauseListener listener) 添加一个暂停监听器
addUpdateListener(AnimatorUpdateListener listener):监听动画每一帧的值
void setInterpolator(TimeInterpolator value):设置插值器属性

基本使用

ValueAnimator

概述
属性动画中ValueAnimator是对值进行了一个平滑的动画过渡的动画。在两个数值范围内,顺序地产生过渡数值,过渡速率可以通过Intepolator来控制。
父类
Animator—所有属性动画的基类
构建动画的方法
先介绍几个概念:
values:设定ValueAnimatord的类型值
TypeEvaluator:插值器,设置动画系统如何从初始值过度到结束值
PropertyValuesHolder: 作用就是持有一个属性和它的开始值结束值
1、ofFloat:设置动画过渡值为float类型的ValueAnimator
构造并返回一个在浮点值之间进行动画的ValueAnimator,比如参数为(0.5f,1.0f)

public static ValueAnimator ofFloat(float... values)

参数说明:
参数类型都是可变参数长参数,可以传入任何float类型的值;传进去的值列表,就表示动画时的变化范围。
2、ofInt:设置动画过渡值为int类型的ValueAnimator
构造并返回一个在int值之间进行动画的ValueAnimator,比如参数为(0,360)

  public static ValueAnimator ofInt(int... values)

参数说明:
参数类型都是可变参数长参数,可以传入任何int类型的值;传进去的值列表,就表示动画时的变化范围
3、ofObject:设置动画过渡值为float类型的ValueAnimator
构造并返回一个在对象值之间进行动画的ValueAnimator,evaluator为插值器,可以使用自带的,也可以自定义插值器。详细介绍看下面高级属性讲解。

  public static ValueAnimator ofObject(TypeEvaluator evaluator, Object... values)

参数说明:
evaluator:是自定义的 Evaluator;
values,可变参数长参数。
由上面源码可见,ofObject不能直接操作可见,可以在其addUpdateListener方法中操作,该方法通常适用于自定义View。
4、ofArgb:设置动画过渡值为color类型的ValueAnimator
构造并返回一个在颜色值值之间进行动画的ValueAnimator

 public static ValueAnimator ofArgb(int... values)

参数说明:
values:可变的颜色参数。一般不使用,自定义颜色比ofArgb效果强大。
5、ofPropertyValuesHolder
构造并返回动画 ValueAnimator 之间的 PropertyValuesHolder 对象中指定的值。
在PropertyValuesHolder指定不同属性动画,同时操作多个不同属性的ValueAnimator 。

 public static ValueAnimator ofPropertyValuesHolder(PropertyValuesHolder... values)

参数说明:
values:一个或多个PropertyValuesHolder

ValueAnimator 创建动画
使用ValueAnimator创建动画可按如下4个步骤进行。

  1. 调用 ValueAnimator 的 oflnt() 、 ofFloat()、ofArgb() 或 ofObject()静态方法创建ValueAnimator 实例。
  2. 调用ValueAnimator的 Se tXxx()方法设置动画属性比如动画监听、持续时间、插值方式、重复次数等。
  3. 调用ValueAnimator的start()方法启动动画。
  4. 为ValueAnimator注册AnimatorUpdateListener监听器,在该监听器中可以监听ValueAnimator计算出来的值的改变,并将这些值应用到指定对象上。

ValueAnimator 使用
代码:
创建动画时可以参考上面动画的构建方法,测试代码中使用ofFolat方法实现值从0平滑过渡到1

 /**
     * ValueAnimator使用
     *
     * @param view
     */
    public void valueAnimator(View view) {

        animator = ValueAnimator.ofFloat(1f, 0f, 1f); //值从0平滑过渡到1    
        animator.setDuration(3000);//动画持续时间
//        animator.setInterpolator(new OvershootInterpolator(5f));////使用插值器
        animator.setInterpolator(new MyDecelerateAccelerateInterpolator());//使用自定义插值器
        animator.setRepeatCount(1);//设置重复动画,重复1次,则实际播放2次
        //设置重复模式:逆向重复
//        animator.setRepeatMode(ValueAnimator.REVERSE);
        //设置重复模式:重新开始
//        animator.setRepeatMode(ValueAnimator.RESTART);
        //监听动画每一帧的值,添加对值的监听,获取值
        animator.addListener(new Animator.AnimatorListener() {
            @Override
            public void onAnimationStart(Animator animation) {
                //动画开始
                Toast.makeText(AnimatorAnimatonActivity.this, "动画开始了", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onAnimationEnd(Animator animation) {
                //动画结束
                Toast.makeText(AnimatorAnimatonActivity.this, "动画结束了", Toast.LENGTH_SHORT).show();
                animation.cancel();
            }

            @Override
            public void onAnimationCancel(Animator animation) {
                //动画取消,不论动画如何结束,取消还是正常结束,都会回调onAnimationEnd
            }

            @Override
            public void onAnimationRepeat(Animator animation) {
                //动画重复
            }
        });
        //监听动画每一帧的值,添加对值的监听,获取值
        /*
        该监听器负责更新对象的值
        可以通过getAnimatedValue()方法来获取当前帧的值,并将计算出来的值应用到指定对象上。
         */
        animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator valueAnimator) {
                float value = (float) valueAnimator.getAnimatedValue();
                iv.setRotationY(rotate);
                //打印
                Log.i("TAG", "onAnimationUpdate: value = "
                        + value);
            }
        });
         animator.addPauseListener(new Animator.AnimatorPauseListener() {
            @Override
            public void onAnimationPause(Animator animation) {//通知动画暂停

            }

            @Override
            public void onAnimationResume(Animator animation) {//通知动画得到恢复,之前被暂停

            }
        });
        animator.start();

    }

代码显示效果:

这里写图片描述

ObjectAnimator

概述
直接对任意对象的任意属性进行动画操作的。

ObjectAnimator工作机制

通过寻找特定属性的get和set方法,然后通过方法不断地对值进行改变,从而实现动画效果的。

父类
ValueAnimator。

构建动画的方法

1、ofFloat:设置动画过渡值为float类型的ObjectAnimator
构造并返回一个在浮点值之间进行动画的ObjectAnimator,比如参数为(0.5f,1.0f)

第一种ofFloat:

public static ObjectAnimator ofFloat(Object target, String propertyName, float... values)

参数解析:
target:第一个参数用于指定这个动画要操作的是哪个控件
propertyName:第二个参数用于指定这个动画要操作这个控件的哪个属性,是一个字符串,ObjectAnimator会根据这个属性名拼一个set[属性名](setRotationY)方法,然后用反射调用,从而实现动画。
values:第三个参数是可变长参数,表示动画值的范围。通常设置两个以上。

常用的propertyName整理

set[属性名/propertyName]Discription
setRotationX(float rotationX)表示围绕 X 轴旋转,rotationX 表示旋转度数
setRotationY(rotationY)表示围绕 Y 轴旋转,rotationY 表示旋转度数
setRotation(float rotation)表示围绕 Z 旋转,rotation 表示旋转度数
setTranslationX(float translationX)表示在 X 轴上的平移距离,以当前控件为原点,向右为正方向,参数 translationX 表示移动的距离。
setTranslationY(float translationY)表示在 Y 轴上的平移距离,以当前控件为原点,向下为正方向,参数 translationY 表示移动的距离
setScaleX(float scaleX)在 X 轴上缩放,scaleX 表示缩放倍数
setScaleY(float scaleY)在 Y 轴上缩放,scaleY 表示缩放倍数

第二种ofFloat:

public static ObjectAnimator ofFloat(Object target, String xPropertyName, String yPropertyName,Path path)

参数解析:
xPropertyName:X 坐标正在进行动画处理的属性的名称
yPropertyName:y 坐标正在进行动画处理的属性的名称
path:动画的路径。相当于values,但是功能更强大,可以画出任意的图形,一般在矢量动画中经常用。后面会讲到。

第三种ofFloat:

public static <T> ObjectAnimator ofFloat(T target, Property<T, Float> property,
            float... values) 

参数说明:
property:正在进行动画处理的属性

第四种ofFloat:

 public static <T> ObjectAnimator ofFloat(T target, Property<T, Float> xProperty,
            Property<T, Float> yProperty, Path path) 

参数说明:
xProperty:正在进行动画处理的属性的x坐标
yProperty:正在进行动画处理的属性的y坐标

2、ofInt:设置动画过渡值为int类型的ObjectAnimator
构造并返回一个在int值之间进行动画的ObjectAnimator,比如参数为(0,360).
参数说明参照ofFloat.

  public static ObjectAnimator ofInt(Object target, String propertyName, int... values)
 public static ObjectAnimator ofInt(Object target, String xPropertyName, String yPropertyName,
            Path path) 
  public static <T> ObjectAnimator ofInt(T target, Property<T, Integer> property, int... values)
  public static <T> ObjectAnimator ofInt(T target, Property<T, Integer> xProperty,
            Property<T, Integer> yProperty, Path path)

3、ofObject:设置动画过渡值为float类型的ObjectAnimator
构造并返回一个在对象值之间进行动画的ObjectAnimator,evaluator为插值器,可以使用自带的,也可以自定义插值器。详细介绍看下面高级属性讲解。
参数说明参照ofFloat.

   public static ObjectAnimator ofObject(Object target, String propertyName,
            TypeEvaluator evaluator, Object... values) 

参数说明:
evaluator:是自定义的 Evaluator;
values,可变参数长参数。
由上面源码可见,ofObject不能直接操作可见,可以在其addUpdateListener方法中操作,该方法通常适用于自定义View。

 @NonNull
    public static ObjectAnimator ofObject(Object target, String propertyName,
            @Nullable TypeConverter<PointF, ?> converter, Path path)
  @NonNull
    @SafeVarargs
    public static <T, V> ObjectAnimator ofObject(T target, Property<T, V> property,
            TypeEvaluator<V> evaluator, V... values)
 @NonNull
    @SafeVarargs
    public static <T, V, P> ObjectAnimator ofObject(T target, Property<T, P> property,
            TypeConverter<V, P> converter, TypeEvaluator<V> evaluator, V... values)
 @NonNull
    public static <T, V> ObjectAnimator ofObject(T target, @NonNull Property<T, V> property,
            @Nullable TypeConverter<PointF, V> converter, Path path)

4、ofArgb:设置动画过渡值为color类型的ObjectAnimator
构造并返回一个在颜色值值之间进行动画的ObjectAnimator.
参数说明参照ofFloat.

 public static ObjectAnimator ofArgb(Object target, String propertyName, int... values)
  public static <T> ObjectAnimator ofArgb(T target, Property<T, Integer> property,
            int... values)

5、ofPropertyValuesHolder
在PropertyValuesHolder指定不同属性动画,同时操作多个不同属性的ObjectAnimator。
参数说明参照ofFloat.

 @NonNull
    public static ObjectAnimator ofPropertyValuesHolder(Object target,
            PropertyValuesHolder... values)

6、ofMultiFloat
构造并返回一个对多个Float进行动画化的ObjectAnimator参数设置器只支持仅使用Float参数的公共方法。
参数说明参照ofFloat.

public static ObjectAnimator ofMultiFloat(Object target, String propertyName,
            float[][] values)

参数说明:
values:一组动画会随着时间的推移动画之间的值。

 public static ObjectAnimator ofMultiFloat(Object target, String propertyName, Path path)
  public static <T> ObjectAnimator ofMultiFloat(Object target, String propertyName,
            TypeConverter<T, float[]> converter, TypeEvaluator<T> evaluator, T... values)

参数说明:
converter:T 对象转换为多值二传手 float 参数
7、ofMultiInt
构造并返回一个对多个int进行动画化的ObjectAnimator参数设置器只支持仅使用int参数的公共方法。
参数说明参照上面参数说明.

 public static ObjectAnimator ofMultiInt(Object target, String propertyName, int[][] values)
  public static ObjectAnimator ofMultiInt(Object target, String propertyName, Path path)
  @SafeVarargs
    public static <T> ObjectAnimator ofMultiInt(Object target, String propertyName,
            TypeConverter<T, int[]> converter, TypeEvaluator<T> evaluator, T... values)

ObjectAnimator 创建动画
ObjectAnimator 创建动画可以参考ValueAnimator创建动画的步骤,但不需要设置AnimatorUpdateListener监听器,即第四步不是必要的。因为ObjectAnimator继承了 ValueAnimator,因此它可以直接将ValueAnimator在动画过程中计算出来的值应用到指定对象的指定属性上(ValueAnimator则需要注册一个监听器来完成这个
工作)。因此使用ObjectAnimator就不需要注册AnimatorUpdateListener监听器了。

ObjectAnimator 使用
代码

 /**
     * ObjectAnimator使用
     *
     * @param view
     */
    public void ObjectAnimator(View view) {
//        ObjectAnimator ofFloat(Object target, String propertyName, float... values)
        /*
         * 第一个参数:动画的控件
         * 第二个参数:动画的属性名 任意的值 alpha、rotation、translationX、scaleY
         * 第三个参数:可变参数,表示动画值的范围
         *  其中属性名是一个字符串,ObjectAnimator会根据这个属性名拼一个set[属性名](setRotationY)方法,然后用反射调用,从而实现动画
         */   
        float curTranslationX = iv.getTranslationX();//获取到当前控件的translationX的位置
        /*
         * 第一个参数:动画的控件
         * 第二个参数:
         * 第三个参数:系统控件移动方向
         * 第四个参数:
         * 第五个参数:
        */
        objectAnimator = ObjectAnimator.ofFloat(iv, "translationX", curTranslationX, -500f, curTranslationX);

        objectAnimator.setDuration(3000);
        objectAnimator.setRepeatCount(1);
        objectAnimator.setRepeatMode(ValueAnimator.REVERSE);
        objectAnimator.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) {

            }
        });
        objectAnimator.start();
    }

测试效果:

这里写图片描述

高级属性讲解

Evaluator

概述:
属性动画还需要利用一个 Evaluator (计算器),该工具类控制属性动画如何计算属性值。设置动画系统如何从初始值过度到结束值
使用:
ofObject()构建动画时传入第二个参数。
分类:
Android提供了如下Evaluator:

  • IntEvaluator:计算int型的属性值插值
  • FloatEvaluator:计算float型的属性值插值;
  • ArgbEvaluator:计算颜色的属性值插值;
  • TypeEvaluator: 它是计算器接口,开发者可以通过实现该接口来实现自定义计算器。 如 果 需 要 对 in、 float或
    者Argb 以 外 类 型 的 属 性 执 行 属 性 动 画 , 可 能 需 要 实 现TypeEvaluator接口来实现自定义计算器。

Interpolator

概述:
插值器只是一个概念,系统中与之相关的类叫做 TimeInterpolator ,其只是一个接口,准确来说叫做“时间插值器”。
意思是:该时间插值器定义了动画的变化率,允许动画做非线性的运动,比如加速、减速。
Interpolator根据特定算法计算出整个动画所需要动态插入帧的密度和位置。简单地说,
Interpolator负责控制动画的变化速度,这就使得基本的动画效果 ( Alpha 、 Scale 、 Translate 、Rotate)能以匀速变化、加速、减速、抛物线速度等各种速度变化。
TimeInterpolator 是 一 个 接 口 , 它 定 义 了 所 有 Interpolator都 需要实现的方法 ,开发者完全可以通过实现Interpolator来控制动画的变化速度。

使用:
setInterpolator(TimeInterpolator value):设置插值器属性
分类:

Android为Interpolator提供了如下几个实现类,分别用于实现不同的动画变化速度
1、AccelerateDecelerateInterpolator开始与结束的地方速率改变比较慢,在中间的时候加速.
2、AccelerateInterpolator开始的地方速率改变比较慢,然后开始加速
3、AnticipateInterpolator开始的时候向后然后向前甩
4、AnticipateOvershootInterpolator开始的时候向后然后向前甩一定值后返回最后的值
5、BounceInterpolator动画结束的时候弹起
6、CycleInterpolator循环播放特定的次数,速率改变沿着正弦曲线
7、DecelerateInterpolator在开始的地方快然后慢
创建的时候,也可以传递float类型值,如DecelerateInterpolator(2f):
8、 LinearInterpolator以常量速率改变
9、OvershootInterpolator向前甩一定值后再回到原来位置
创建的时候,也可以传递float类型值,OvershootInterpolator(0.8f):
10、自定义TimeInterpolator

PropertyValuesHolder()

概述:
PropertyValuesHolder 可以被 ValueAnimator 或 ObjectAnimator用来创建动画,以同时操作多个不同属性。
PropertyValuesHolder 这个类的意义就是,它其中保存了动画过程中所需要操作的属性和对应的值。通过 ofFloat(Object target, String propertyName, float… values)构造的动画,ofFloat()的内部实现其实就是将传进来的参数封装成 PropertyValuesHolder 实例来保存动画状态。在封装成 PropertyValuesHolder 实例以后,后期的各种操作也是以 PropertyValuesHolder 为主的
Keyframe
Keyframe用来保存一对时间/变量的动画值

 public static Keyframe ofFloat(float fraction, float value)

其中:
fraction:表示当前的显示进度,即从加速器中 getInterpolation()函数的返回值;
value:表示当前应该在的位置 比如 Keyframe.ofFloat(0, 0)表示动画进度为 0 时,动画所在的数值位置为 0;Keyframe.ofFloat(0.25f, -20f)表示动画进度为 25%时,动画所在的数值位置为-20;Keyframe.ofFloat(1f,0)表示动画结束时,动画所在的数值位置为 0

源码:

public static ObjectAnimator ofPropertyValuesHolder(Object target,PropertyValuesHolder... values)

其中:

target:指需要执行动画的控件
values:是一个可变长参数,可以传进去多个 PropertyValuesHolder 实例,由于每个 PropertyValuesHolder 实例都会针对一个属性做动画,所以如果传进去多个 PropertyValuesHolder 实例,将会对控件的多个属性同时做动画操作。 
public static PropertyValuesHolder ofKeyframe(String propertyName, Keyframe... values) 

其中
propertyName:动画所要操作的属性名
values:Keyframe 的列表,PropertyValuesHolder 会根据每个 Keyframe 的设定,定时将指定的值输出给动画。
示例代码:

/*
    PropertyValuesHolders使用
     */
    public void PropertyValuesHolder(View view) {
          /*
        一个ObjectAnimator
         */
        PropertyValuesHolder pvhX = PropertyValuesHolder.ofFloat("x", 50f);
        PropertyValuesHolder pvhY = PropertyValuesHolder.ofFloat("y", 100f);
        ObjectAnimator.ofPropertyValuesHolder(iv, pvhX, pvhY).start();

    }
    public void Keyframe(View view) {
        //keyframe
        Keyframe keyframe1 = Keyframe.ofFloat(0.0f,0);
        Keyframe keyframe2 = Keyframe.ofFloat(0.25f,-30);
        Keyframe keyframe3 = Keyframe.ofFloat(0.5f,0);
        Keyframe keyframe4 = Keyframe.ofFloat(0.75f, 30);
        Keyframe keyframe5 = Keyframe.ofFloat(1.0f,0);
        PropertyValuesHolder rotation = PropertyValuesHolder.ofKeyframe("rotation", keyframe1, keyframe2, keyframe3, keyframe4,keyframe5);

        PropertyValuesHolder alpha = PropertyValuesHolder.ofFloat("alpha",1.0f,0.2f,1.0f);
        PropertyValuesHolder scaleX = PropertyValuesHolder.ofFloat("scaleX",1.0f,0.2f,1.0f);
        PropertyValuesHolder scaleY = PropertyValuesHolder.ofFloat("scaleY",1.0f,0.2f,1.0f);
        PropertyValuesHolder color = PropertyValuesHolder.ofInt("BackgroundColor", 0XFFFFFF00, 0XFF0000FF);

        ObjectAnimator animator = ObjectAnimator.ofPropertyValuesHolder(iv, alpha, scaleX, scaleY,color,rotation);
        animator.setInterpolator(new OvershootInterpolator());
        animator.setDuration(5000).start();
    }

示例效果:
这里写图片描述

ViewPropertyAnimator

概述:
ViewPropertyAnimator 提供了一种并行属性动画的简单方法,在3.1系统当中附增的一个新的功能,是Android开发团队为View的动画操作提供一种更加便捷的用法3.1系统当中附增的一个新的功能,对View进行动画操作的类。

优点:
可以操作View对象(只能作用于View而不能作用于其他object )。
将多个动画组合到一起,多个属性动画是一次同时变化,只执行一次UI刷新
支持连缀用法的。

ViewPropertyAnimator的常用方法:

MethodDiscription
alpha(float value)设置透明度,value表示变化到多少,1不透明,0全透明。
scaleY(float value)设置Y轴方向的缩放大小,value表示缩放到多少。1表示正常规格。小于1代表缩小,大于1代表放大。
scaleX(float value)设置X轴方向的缩放大小,value表示缩放到多少。1表示正常规格。小于1代表缩小,大于1代表放大。
translationY(float value)设置Y轴方向的移动值,作为增量来控制View对象相对于它父容器的左上角坐标偏移的位置,即移动到哪里。
translationX(float value)设置X轴方向的移动值,作为增量来控制View对象相对于它父容器的左上角坐标偏移的位置。
rotation(float value)控制View对象围绕支点进行旋转, rotation针对2D旋转
rotationX (float value)控制View对象围绕X支点进行旋转, rotationX针对3D旋转
rotationY(float value)控制View对象围绕Y支点进行旋转, rotationY针对3D旋转
x(float value)控制View对象相对于它父容器的左上角坐标在X轴方向的最终位置。
y(float value)控制View对象相对于它父容器的左上角坐标在Y轴方向的最终位置
void cancel()取消当前正在执行的动画
setListener(Animator.AnimatorListener listener)设置监听器,监听动画的开始,结束,取消,重复播放
setUpdateListener(ValueAnimator.AnimatorUpdateListener listener)设置监听器,监听动画的每一帧的播放
setInterpolator(TimeInterpolator interpolator)设置插值器
setStartDelay(long startDelay)设置动画延长开始的时间
setDuration(long duration)设置动画执行的时间
withLayer()设置是否开启硬件加速
withStartAction(Runnable runnable)设置用于动画监听开始(Animator.AnimatorListener)时运行的Runnable任务对象
withEndAction(Runnable runnable)设置用于动画监听结束(Animator.AnimatorListener)时运行的Runnable任务对象

示例代码:
/*
ViewPropertyAnimator使用
*/
public void ViewPropertyAnimator(View view) {//控件移动到(0,0)
iv.animate().x(0).y(0).setDuration(5000)
.setInterpolator(new BounceInterpolator());

}

示例效果:

这里写图片描述

总结

属性动画的本质原理:通过不断对值进行改变,并不断将该值赋给对象的属性,从而实现该对象在该属性上的动画效果。虽然属性动画已经非常强大,但是要想对一些复杂的图形进行动画操作,还是有点难度的,矢量动画可以解决这个难点因为前面的动画都是对控件或者View做动画,而矢量动画是对图形做动画。请继续关注下一篇属性动画实现Tween功能和高级属性实例。
写博客是为了帮助开发者学习使用技术,同时巩固自己所学技术。如果此篇博客有助于您的学习,那是我的荣幸!如果此篇博客有任何瑕疵,请多多指教!在此感谢您的学习和指教!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值