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


    1. 基础使用

    由于是继承了ValueAnimator类
    所以使用的方法十分类似:XML 设置 / Java设置
    
    • 1
    • 2

    1.1 Java设置

      ObjectAnimator animator = ObjectAnimator.ofFloat(Object object, String property, float ....values);  
    
    • 1

    // 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
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    // 启动动画

    1.2 XML 设置

        步骤1:在路径 res/animator 的文件夹里创建动画效果.xml文件
    
    
        此处设置为res/animator/set_animation.xml
    
    
        步骤2:设置动画参数
    
    set_animation.xml
    // ObjectAnimator 采用  标签
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    android:valueFrom=“1” // 初始值
    android:valueTo=“0” // 结束值
    android:valueType=“floatType” // 变化值类型 :floatType & intType
    android:propertyName=“alpha” // 对象变化的属性名称

    />

    在Java代码中启动动画
    Animator animator = AnimatorInflater.loadAnimator(context, R.animator.view_animation);  
    
    • 1
    • 2

    // 载入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();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述

    b. 旋转
    mButton = (Button) findViewById(R.id.Button);
        // 创建动画作用对象:此处以Button为例
    
    • 1
    • 2
    • 3

    ObjectAnimator animator = ObjectAnimator.ofFloat(mButton, “rotation”, 0f, 360f);

        // 表示的是:
        // 动画作用对象是mButton
        // 动画作用的对象的属性是旋转alpha
        // 动画效果是:0 - 360
        animator.setDuration(5000);
        animator.start();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    c. 平移
    mButton = (Button) findViewById(R.id.Button);
        // 创建动画作用对象:此处以Button为例
    
    • 1
    • 2
    • 3

    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为例
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述

    ObjectAnimator animator = ObjectAnimator.ofFloat(mButton, “scaleX”, 1f, 3f, 1f);
    // 表示的是:
    // 动画作用对象是mButton
    // 动画作用的对象的属性是X轴缩放
    // 动画效果是:放大到3倍,再缩小到初始大小
    animator.setDuration(5000);
    animator.start();

    2. 通过自定义对象属性实现动画效果

        在上面的讲解,我们使用了属性动画最基本的四种动画效果:透明度、平移、旋转 & 缩放
    
    • 1

    2.1 具体使用

    对于属性动画,其拓展性在于:不局限于系统限定的动画,可以自定义动画,即自定义对象的属性,并通过操作自定义的属性从而实现动画。
    那么,该如何自定义属性呢?本质上,就是:
    
        为对象设置需要操作属性的set() & get()方法
        通过实现TypeEvaluator类从而定义属性变化的逻辑
    
    
        类似于ValueAnimator的过程
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2.2 实例讲解

    下面,我将用一个实例来说明如何通过自定义属性实现动画效果
    
        
            实现的动画效果:一个圆的颜色渐变 
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

            自定义属性的逻辑如下:(需要自定义属性为圆的背景颜色)
        
    
    
    步骤1:设置对象类属性的set() & get()方法
    设置对象类属性的set() & get()有两种方法:
    
        
            通过继承原始类,直接给类加上该属性的 get()& set(),从而实现给对象加上该属性的 get()& set()
        
        
            通过包装原始动画对象,间接给对象加上该属性的 get()& set()。即 用一个类来包装原始对象
        
    
    此处主要使用第一种方式进行展示。
    
        关于第二种方式的使用,会在下一节进行详细介绍。
    
    MyView2.java
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    public class MyView2 extends View {
       
    // 设置需要用到的变量
    public static final 
    • 1
    • 2
    • 3
  • 相关阅读:
    vuex存储用户信息封装
    第一次线上 OOM 事故,竟和 where 1 = 1 有关
    PHP 文件处理
    回溯-数组总和II
    golang学习笔记——要求用户输入一个数字,如果该数字为负数,则进入紧急状态
    Spring Boot DTO 示例 - 实体到 DTO 的转换
    一致性 hash 环
    随着模型的复杂度增加,过拟合是怎么导致的?如何解决?
    Java-贪吃蛇游戏
    使用单调队列解决 “滑动窗口最大值” 问题
  • 原文地址:https://blog.csdn.net/fjnu_se/article/details/128207896