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

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

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);
  
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值