Android 动画之估值器(TypeEvaluator)与插值器(Interpolator)

说到属性动画,就绕不开估值器(TypeEvaluator)与插值器(Interpolator),下边咱就说说这两个:TypeEvaluator(估值器):定义:设置 属性值 从初始值过渡到结束值 的变化具体数值插值器(Interpolator)决定 值 的变化规律(匀速、加速blabla),即决定的是变化趋势;而接下来的具体变化数值则交给估值器 属性动画特有的属性 协助插值器(Interpolator)实现非线性动画效果 其实,对于ValueAnimator.ofInt() 、...
摘要由CSDN通过智能技术生成

说到属性动画,就绕不开估值器(TypeEvaluator)与插值器(Interpolator),下边咱就说说这两个:

TypeEvaluator(估值器):

 定义:设置 属性值 从初始值过渡到结束值 的变化具体数值

  1. 插值器(Interpolator)决定 值 的变化规律(匀速、加速blabla),即决定的是变化趋势;而接下来的具体变化数值则交给估值器
  2. 属性动画特有的属性
  3. 协助插值器(Interpolator)实现非线性动画效果

  其实,对于 ValueAnimator.ofInt()  、  ValueAnimator.ofFloat()   、ValueAnimator.ofArgb()这三个,系统是自带了三个估值器,分别是IntEvaluator 、FloatEvaluator 、ArgbEvaluator .

   但是对于ValueAnimator.ofObject() 以及 ObjectAnmitor 就需要手动传入估值器,当然也可以使用系统自带的三个估值器。既然说到这里了,肯定也就能自定义估值器,下边咱先看一下FloatEvaluator 源码吧:

public class FloatEvaluator implements TypeEvaluator {  
// FloatEvaluator实现了TypeEvaluator接口
 
// 重写evaluate()
    public Object evaluate(float fraction, Object startValue, Object endValue) {  
// 参数说明
// fraction:表示动画完成度(根据它来计算当前动画的值)
//fraction 就是插值器返回过来的百分比数值
// startValue、endValue:动画的初始值和结束值
        float startFloat = ((Number) startValue).floatValue();  
        
        return startFloat + fraction * (((Number) endValue).floatValue() - startFloat);  
        // 初始值 过渡 到结束值 的算法是:
        // 1. 用结束值减去初始值,算出它们之间的差值
        // 2. 用上述差值乘以fraction系数
        // 3. 再加上初始值,就得到当前动画的值
    }  
}  
  • 但对于ValueAnimator.ofObject(),从上面的工作原理可以看出并没有系统默认实现,因为对对象的动画操作复杂 & 多样,系统无法知道如何从初始对象过度到结束对象
  • 因此,对于ValueAnimator.ofObject()和 ObjectAnmitor ,我们需自定义估值器(TypeEvaluator)来告知系统如何进行从 初始对象 过渡到 结束对象的逻辑
  • 自定义实现的逻辑如下<
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值