Android 属性动画:基本知识总结

本文总结了Android属性动画的基本知识,包括ValueAnimator、ObjectAnimator、估值器和插值器的使用。属性动画允许在指定时间内改变View的属性,实现真正的视图变化。ValueAnimator是核心类,ObjectAnimator提供封装,AnimatorSet用于同时运行多个动画,PropertyValuesHolder代表过渡的值,TypeEvaluator控制动画值的变化。插值器用于调整时间,影响动画效果。文中还给出了各种方法的用法示例和常见插值器的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提纲:文章写了什么?

  1. 什么是属性动画?
  2. 属性动画相关接口及常用类
  3. ValueAnimator
  4. ObjectAnimator
  5. 估值器
  6. 差值器

属性动画,顾名思义就是:沿着一定的时间顺序,通过改变View的属性,从而得到的动画的效果。引入属性动画最大的作用就是为了“眼见为实”,对于ViewAnimation,动画的移动和缩放并没有真正的改变控件的位置和热区,而属性动画则可以做到这一点。

Interface:

这里写图片描述

Class:

这里写图片描述

这里要着重记录的是这几个类:

  • ValueAnimator 属性动画的核心类
  • ObjectAnimator 继承 ValueAnimator 对ValueAnimator进行了一层封装
  • AnimatorSet 可以同时运行一组动画
  • PropertyValuesHolder 他代表一个在动画运行中需要过度到的值。
  • TypeEvaluator 实现此接口的实例,将决定AnimatorUpdateListener接收到的值。

这里有必要说明一下,上面对动画的描述是“运行”,而不是“播放”。因为属性动画的本质是在指定的时间内于指定的值之间过度。这就意味着他并不仅限于View控件。举例来说,他可以是一个不断运动的看不见的点,而你在需要的时候可以通过回调知道在某一时间点对应的值,从而进行canvas的绘制。

ValueAnimator

继承自Animator:

这里写图片描述

常用的方法有:

这里写图片描述

用法如下:

 // 空构造方法
     ValueAnimator animator = new ValueAnimator();

     // 创建一个实例 ,开始点0f,结束点位100f,期间经过50
    ValueAnimator animator = ValueAnimator.ofFloat(0, 50 ,100);

    // 创建一个实例 ,开始点0f,结束点位100
    ValueAnimator animator = ValueAnimator.ofInt(0, 100);

    //创建一个实例 ,开始点0,结束点位100,自定义返回的类型
    ValueAnimator animator = ValueAnimator.ofObject(new TypeEvaluator() {
            @Override
            public Object evaluate(float fraction, Object startValue, Object endValue) {
                // 这里的三个值分别代表了:一个0~1的float, 开始点, 结束点
                return new XXX()
            }
        } , 0 , 100);

ObjectAnimator

继承自ValueAnimator:

这里写图片描述

设置动画的方法有:

这里写图片描述

具体用法:

 ObjectAnimator.ofFloat(view , rotationX , 0.0f , 360f)
                .setDuration(2000)
                .start();

估值器

定义及常见的估值器如下:

这里写图片描述

使用,PositionEvaluator() 是自定义的估值器:

ValueAnimator animator = ValueAnimator.ofObject(
                new PositionEvaluator(),
                createPoint(RADIUS, RADIUS),
                createPoint(getWidth() - RADIUS, getHeight() - RADIUS));
        animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                currentPoint = (PositionPoint) animation.getAnimatedValue();
                invalidate();
            }
        });

插值器

在属性动画一章中,我们提到最多的就是动画的时间概念,插值器就是对时间进行修改的东西,比如说你闲的蛋疼,走斑马线的时候只踩白块,这是线性的运动轨迹,而这时候突然在其中某些白块中间又插入了几个距离不相等的白块,你的步伐就不一样了,移动速度也收到了影响,这就是插值器所做的勾当。

Android 定义好的一些常用插值器:

AccelerateDecelerateInterpolator 慢 - 快- 慢
AccelerateInterpolator 慢 - 快
DecelerateInterpolator 快 - 慢
AnticipateInterpolator 开始的时候向后然后向前甩
AnticipateOvershootInterpolator 开始的时候向后然后向前甩一定值后返回最后的值
BounceInterpolator 动画结束的时候弹起
CycleInterpolator 动画循环播放特定的次数,速率改变沿着正弦曲线
LinearInterpolator 以常量速率改变
OvershootInterpolator 向前甩一定值后再回到原来位置

使用:

animation.setInterpolator(new DecelerateInterpolator());

参考致谢:
(1)、DOC
(2)、探索安卓中有意义的动画!
(3)、 Android 动画

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值