Android属性动画的基本用法

本篇博客记录一下Android属性动画的基本用法。


1、ValueAnimator

ValueAnimator是属性动画中最重要的一个类,它继承自Animator类,
定义了属性动画中大部分的核心功能,包括计算各个帧的属性值、
处理更新事件、按照属性值的类型控制计算规则等。

一个完整的属性动画由两部分组成:
1、计算动画各个帧的相关属性值。
2、将这些属性值设置给指定的对象。

ValueAnimator为开发者实现了第一部分功能,
第二部分功能由开发者自行设置。

ValueAnimator的构造函数是空实现,一般都是使用类似如下的
静态工厂方法来进行实例化:

    .............
    public static ValueAnimator ofInt(int... values) {
        ValueAnimator anim = new ValueAnimator();
        anim.setIntValues(values);
        return anim;
    }

    public static ValueAnimator ofArgb(int... values) {
        ValueAnimator anim = new ValueAnimator();
        anim.setIntValues(values);
        anim.setEvaluator(ArgbEvaluator.getInstance());
        return anim;
    }
    .............

获取到ValueAnimator的实例后,需要设置动画的持续时间、插值方式、重复次数等属性值,
还需要为ValueAnimator注册AnimationUpdateListener监听器,并在这个监听器的onAnimationUpdate
方法中将计算出来的属性值设置给指定对象。
具体的使用方法类似于:

        final ImageView imageView = findViewById(R.id.test_view);

        ValueAnimator colorAnimation = ValueAnimator.ofObject(new FloatEvaluator(),
                1, 0.8f, 0.5f, 0);
        colorAnimation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator valueAnimator) {
                imageView.setAlpha((float)valueAnimator.getAnimatedValue());
            }
        });
        colorAnimation.setDuration(6000);
        colorAnimation.start();
2、ObjectAnimator:单属性变化

ObjectAnimator是ValueAnimator的子类,封装了将属性值设置给指定的对象的动作。
因此在实际开发中使用的最多的就是ObjectAnimator,它在构造实例时就会指定动画作用
的具体对象和对象的属性名,而且一般不需要注册AnimationUpdateListener监听器。

Android提供的属性动画机制,可以很简单地调整视图的属性值,形成动画效果。例如:

.............
//在3s时间内,将mSunView沿着y轴从start移动到end的位置
//其实现的原理是,不断调用mSunView.setY接口,设置其纵坐标
//纵坐标的值,逐渐从start变化到end
ObjectAnimator heightAnimator = ObjectAnimator
        .ofFloat(mSunView, "y", start, end)
        .setDuration(3000);

//也可以设置插值器,例如逐渐加速等
heightAnimator.setInterpolator(new AccelerateInterpolator());

//动画开始
heightAnimator.start();
............

ObjectAnimator将根据插值器的规则,将属性值从start逐渐变化到end。

不过有的属性值并不适合逐渐变化,例如颜色。
我们知道颜色是用类似于#fcfcb716这种16进制的数字表示的,如果逐渐增加数字,反而会带来剧烈的色彩变化。
此时ObjectAnimator需要借助TypeEvalutor的子类,精确地计算开始到结束间的递增指。例如:

.........
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值