Android 动画实现 从基础到自定义

  • Post author:
  • Post category:其他




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 采用<animator>  标签

<objectAnimator xmlns:android=“http://schemas.android.com/apk/res/android”

android:valueFrom=“1” // 初始值

android:valueTo=“0” // 结束值

android:valueType=“floatType” // 变化值类型 :floatType & intType

android:propertyName=“alpha” // 对象变化的属性名称

/>

在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 



版权声明:本文为fjnu_se原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。