前言
属性动画的使用 是 Android 开发中常用的知识
今天,我将讲解属性动画使用中最核心的一个方法类:ObjectAnimator,希望你们会喜欢。
目录
示意图
储备知识
1. 简介
实现属性动画中的一个核心方法类
继承自ValueAnimator类,即底层的动画实现机制是基于ValueAnimator类
2. 实现动画的原理
直接对对象的属性值进行改变操作,从而实现动画效果
如直接改变 View的 alpha 属性 从而实现透明度的动画效果
3. 本质原理
通过不断控制 值 的变化,再不断 自动 赋给对象的属性,从而实现动画效果。如下图:
示意图
从上面的工作原理可以看出:ObjectAnimator与 ValueAnimator类的区别:
ValueAnimator 类是先改变值,然后 手动赋值 给对象的属性从而实现动画;是 间接 对对象属性进行操作;具体请看文章:Android:这份Android核心使用类ValueAnimator学习指南请收好!
ObjectAnimator 类是先改变值,然后 自动赋值 给对象的属性从而实现动画;是 直接 对对象属性进行操作;
至于是如何自动赋值给对象的属性,下面会详细说明
4. 基础使用
4.1 使用步骤
由于是继承了ValueAnimator类,所以使用的方法十分类似:XML 设置 / Java设置
/*
* 设置方式1:Java
*/
// 步骤1:创建ObjectAnimator对象
ObjectAnimator animator = ObjectAnimator.ofFloat(Object object, String property, float ....values);
// 作用:
// 1. 创建动画实例
// 2. 参数设置:
// Object object:需要操作的对象
// String property:需要操作的对象的属性
// float ....values:动画初始值 & 结束值(不固定长度)
// 若是两个参数a,b,则动画效果则是从属性的a值到b值
// 若是三个参数a,b,c,则则动画效果则是从属性的a值到b值再到c值
// 以此类推
// 至于如何从初始值过渡到结束值,同样是由估值器决定,此处ObjectAnimator.ofFloat()是有系统内置的浮点型估值器FloatEvaluator,同ValueAnimator讲解
// 步骤2:设置动画属性
// 设置动画运行的时长
anim.setDuration(500);
// 设置动画延迟播放时间
anim.setStartDelay(500);
// 设置动画重复播放次数 = 重放次数+1
// 动画播放次数 = infinite时,动画无限重复
anim.setRepeatCount(0);
// 设置重复播放动画模式
anim.setRepeatMode(ValueAnimator.RESTART);
// ValueAnimator.RESTART(默认):正序重放
// ValueAnimator.REVERSE:倒序回放
// 步骤3:启动动画
animator.start();
/*
* 设置方式2:xml
*/
// 步骤1:在路径 res/animator 的文件夹里创建动画效果.xml文件
// set_animation.xml
// 步骤2:设置动画参数
// ObjectAnimator 采用 标签
android:valueFrom="1" // 初始值
android:valueTo="0" // 结束值
android:valueType="floatType" // 变化值类型 :floatType & intType
android:propertyName="alpha" // 对象变化的属性名称
/>
// 步骤3:启动动画
// 1. 载入XML动画
Animator animator = AnimatorInflater.loadAnimator(context, R.animator.view_animation);
// 2. 设置动画对象
animator.setTarget(view);
// 3. 启动动画
animator.start();
4.2 使用实例
此处先展示四种基本变换:平移、旋转、缩放 & 透明度
平移
// 1. 创建动画作用对象:此处以Button为例
Button mButton = (Button) findViewById(R.id.Button);
// 2. 获得当前按钮的位置
float curTranslationX = mButton.getTranslationX();
// 3. 创建动画对象
ObjectAnimator animator = ObjectAnimator.ofFloat(mButton, "translationX", curTranslationX, 300,curTranslationX);
// 表示的是:
// 动画作用对象是mButton
// 动画作用的对象的属性是X轴平移(在Y轴上平移同理,采用属性"translationY"
// 动画效果是:从当前位置平移到 x=1500 再平移到初始位置
// 4. 设置动画时长
animator.setDuration(5000);
// 5. 启动动画
animator.start();
属性动画 - X轴平移.gif
旋转
// 1. 创建动画作用对象:此处以Button为例
Button mButton = (Button) findViewById(R.id.Button)