动画中的插值器和估值器

TimeInterpolator 时间插值器,它的作用是根据时间流逝的百分比来计算出当前属性值改变的百分比。系统预置的有LinearInterpolator(线性插值器,匀速动画),AccelerateDecelerateInterpolator(加速减速插值器,动画两头慢中间快),DecelerateInterpolator(减速插值器,动画愈来越慢)等。
TypeEvaluator 估值器,他的作用是根据当前属性改变的百分比计算出改变后的属性值。系统预置的有IntEvaluator(针对整型属性),FloatEvaluator(针对浮点型属性)和ArgbEvalutor(针对Color属性)。
属性动画中的插值器和估值器是实现非匀速动画的重要属性。
我们通过一些源码来理解插值器和估值器对属性动画的影响:

public class LinearInterpolator extends BaseInterpolator implements NativeInterpolatorFactory {

    public LinearInterpolator() {
    }

    public LinearInterpolator(Context context, AttributeSet attrs) {
    }

    public float getInterpolation(float input) {
        return input;
    }

    /** @hide */
    @Override
    public long createNativeInterpolator() {
        return NativeInterpolatorFactoryHelper.createLinearInterpolator();
    }
}

通过这个方法getInterpolation(float input)可以看出线性插值器的输入值和返回值一样,即时间流逝的百分比=当前属性改变的百分比;
接着看整型估值器的源码:

public class IntEvaluator implements TypeEvaluator<Integer> {
    public Integer evaluate(float fraction, Integer startValue, Integer endValue) {
        int startInt = startValue;
        return (int)(startInt + fraction * (endValue - startInt));
    }
}

通过这个方法evaluate(float fraction, Integer startValue, Integer endValue) 可以看出整型估值和估值小数、起始值有关。而估值小数又和插值器相关,插值器的返回值=估值小数(fraction)。
除了系统提供的插值器和估值器之外,我们也可以自定义。实现方式也很简单,我们只要派生一个类实现插值器和估值器的接口就可以了。具体一点就是:自定义插值器需要实现Interpolator或者TimeInterpolator,自定义估值器需要实现TypeEvaluator。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值