Android 动画实现 从基础到自定义
1. 基础使用
由于是继承了ValueAnimator类
所以使用的方法十分类似:XML 设置 / Java设置
1.1 Java设置
ObjectAnimator animator = ObjectAnimator.ofFloat(Object object, String property, float ....values);
// Object object:需要操作的对象 // String property:需要操作的对象的属性 // float …values:动画初始值 & 结束值(不固定长度) // 若是两个参数a,b,则动画效果则是从属性的a值到b值 // 若是三个参数a,b,c,则则动画效果则是从属性的a值到b值再到c值 // 以此类推
anim.setDuration(500);
// 设置动画运行的时长
anim.setStartDelay(500);
// 设置动画延迟播放时间
anim.setRepeatCount(0);
// 设置动画重复播放次数 = 重放次数+1
// 动画播放次数 = infinite时,动画无限重复
anim.setRepeatMode(ValueAnimator.RESTART);
// 设置重复播放动画模式
// ValueAnimator.RESTART(默认):正序重放
// ValueAnimator.REVERSE:倒序回放
animator.start();
// 启动动画
1.2 XML 设置
步骤1:在路径 res/animator 的文件夹里创建动画效果.xml文件
此处设置为res/animator/set_animation.xml
步骤2:设置动画参数
set_animation.xml
// ObjectAnimator 采用
/> 在Java代码中启动动画 Animator animator = AnimatorInflater.loadAnimator(context, R.animator.view_animation); // 载入XML动画 animator.setTarget(view); // 设置动画对象 animator.start(); // 启动动画 1.3 使用实例 此处先展示四种基本变换:平移、旋转、缩放 & 透明度 a. 透明度 mButton = (Button) findViewById(R.id.Button); // 创建动画作用对象:此处以Button为例 ObjectAnimator animator = ObjectAnimator.ofFloat(mButton, "alpha", 1f, 0f, 1f); // 表示的是: // 动画作用对象是mButton // 动画作用的对象的属性是透明度alpha // 动画效果是:常规 - 全透明 - 常规 animator.setDuration(5000); animator.start(); b. 旋转 mButton = (Button) findViewById(R.id.Button); // 创建动画作用对象:此处以Button为例 ObjectAnimator animator = ObjectAnimator.ofFloat(mButton, “rotation”, 0f, 360f); // 表示的是: // 动画作用对象是mButton // 动画作用的对象的属性是旋转alpha // 动画效果是:0 - 360 animator.setDuration(5000); animator.start(); c. 平移 mButton = (Button) findViewById(R.id.Button); // 创建动画作用对象:此处以Button为例 float curTranslationX = mButton.getTranslationX(); // 获得当前按钮的位置 ObjectAnimator animator = ObjectAnimator.ofFloat(mButton, “translationX”, curTranslationX, 300,curTranslationX); // 表示的是: // 动画作用对象是mButton // 动画作用的对象的属性是X轴平移(在Y轴上平移同理,采用属性"translationY" // 动画效果是:从当前位置平移到 x=1500 再平移到初始位置 animator.setDuration(5000); animator.start(); d. 缩放 mButton = (Button) findViewById(R.id.Button); // 创建动画作用对象:此处以Button为例 ObjectAnimator animator = ObjectAnimator.ofFloat(mButton, “scaleX”, 1f, 3f, 1f); // 表示的是: // 动画作用对象是mButton // 动画作用的对象的属性是X轴缩放 // 动画效果是:放大到3倍,再缩小到初始大小 animator.setDuration(5000); animator.start(); 2. 通过自定义对象属性实现动画效果 在上面的讲解,我们使用了属性动画最基本的四种动画效果:透明度、平移、旋转 & 缩放 2.1 具体使用 对于属性动画,其拓展性在于:不局限于系统限定的动画,可以自定义动画,即自定义对象的属性,并通过操作自定义的属性从而实现动画。 那么,该如何自定义属性呢?本质上,就是: 为对象设置需要操作属性的set() & get()方法 通过实现TypeEvaluator类从而定义属性变化的逻辑 类似于ValueAnimator的过程 2.2 实例讲解 下面,我将用一个实例来说明如何通过自定义属性实现动画效果 实现的动画效果:一个圆的颜色渐变 自定义属性的逻辑如下:(需要自定义属性为圆的背景颜色) 步骤1:设置对象类属性的set() & get()方法 设置对象类属性的set() & get()有两种方法: 通过继承原始类,直接给类加上该属性的 get()& set(),从而实现给对象加上该属性的 get()& set() 通过包装原始动画对象,间接给对象加上该属性的 get()& set()。即 用一个类来包装原始对象 此处主要使用第一种方式进行展示。 关于第二种方式的使用,会在下一节进行详细介绍。 MyView2.java public class MyView2 extends View { // 设置需要用到的变量 public static final float RADIUS = 100f;// 圆的半径 = 100 private Paint