android evaluater_Android动画之ValueAnimator用法和自定义估值器

1 ValueAnimator和估值器简介

属性动画从API11 开始提供,动画实现主要依靠ValueAnimator和ObjectAnimator两个类,类,属性动画所在包为android.animation.Animator,和补间动画有明显区别,补间动画在android.view.animation包目录下,也说明了属性动画不单单作用于view。

ValueAnimator是属性动画中重要且最基本的类,ObjectAnimator内部也是借助ValueAnimator实现的。ValueAnimator直接子类有两个ObjectAnimator和TimeAnimator。

ValueAnimator是数值从初始值逐渐变化到结束值,无法直接作用于对象,只能通过设置动画监听,获取动画过程中的过渡值,然后设置对象的属性就可以实现动画。默认插值器为AccelerateDecelerateInterpolator,插值器只是动画执行的快慢的控制,控制具体动画过程中获取的值是通过估值器Evaluator来实现的。

ValueAnimator可以利用XML文件生成和java代码生成ValueAnimator类两种方式实现动画。

2 代码方式生成ValueAnimator

ValueAnimator初始化函数:

ValueAnimator.ofInt(int ... values)//处理整形参数

ValueAnimator.ofFloat(float ... values)//处理浮点型

ValueAnimator. ofArgb(int... values) //处理颜色

ValueAnimator.ofObject(TypeEvaluator evaluator, Object... values)//处理object对象,需要自定义估值器

ValueAnimator.ofPropertyValuesHolder(PropertyValuesHolder... values) //处理PropertyValuesHolder

ValueAnimator使用过程:

第一步:利用上面的函数生成ValueAnimator对象,

第二步:设置动画的监听, addUpdateListener(ValueAnimator.AnimatorUpdateListener listener)

第三第:四步利用添加的监听函数获取当前动画的值,getAnimatedValue()

第四步:设置给View,实现动画

属性动画一般用代码生成(因为属性值无法写死在代码中,一般需要动态获取),所以本篇主要讲解代码生成方式,XML方式会提一下使用过程。

3 XML方式生成属性动画

XML生成属性动画三种标签:

: 对应ValueAnimator

: 对应ObjectAnimator

: 对应AnimatorSet

通用属性设置和补间动画类似,本篇主要讲解ValueAnimator,所以标签主要讲解。

举例:

定义XML文件

android:duration="1000" //动画持续时长

android:valueFrom="1" //开始值

android:valueTo="0" //结束值

android:valueType="floatType" //定义类型为float,相当于调用ValueAnimator.ofFloat()

android:repeatCount="1" //重复次数

android:repeatMode="reverse" //重复模式 />

API23 之后还可以利用PropertyValuesHolder和keyframe实现

android:duration="1000"

android:repeatCount="1"

android:repeatMode="reverse">

利用AnimatorInflater加载上面定义的xml文件,生成Animator实例

Animator animator = AnimatorInflater.loadAnimator(context, R.animator.antorXML);

//如果是ObjectAnimator设置动画对象,如果是ValueAnimator则不需要设置target

valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {

@Override

public void onAnimationUpdate(ValueAnimator animation) {

float name = (float) animation.getAnimatedValue();

}

});

animator.setTarget(view);

animator.start();

xml具体使用步骤总结:

第一步利用XML动画文件和AnimatorInflater生成ValueAnimator对象

第二步设置动画监听

第三步获取监听的动画值

第四步设置给view,执行动画

4 ValueAnimator代码方式详解

属性动画最好用代码实现,所以这篇文章也主要侧重代码实现。ValueAnimator无法像ObjectAnimator一样直接作用于对象,只能通过添加监听,获取动画过程之,然后手动设置给对象改变对象的属性。

4.1 ValueAnimator.ofInt(int ... values)

values可以有多个值,ofInt作用是从初始值(参数中的第一个)以整数形式过渡到结束值,如果参数有多个,那就是从初始值过渡到第二个参数,然后从第二个参数过渡到第三个参数,后面以此类推。

mBtn = findViewById(R.id.btn);

imageView = findViewById(R.id.imageview);

valueAnimator = ValueAnimator.ofInt(1, 10);

valueAnimator.setDuration(1000);

valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值