美文网首页Android开发
差值器、估值器是什么

差值器、估值器是什么

作者: 奔跑吧李博 | 来源:发表于2020-10-05 13:04 被阅读0次

插值器Interpolator

根据时间流失的百分比 计算当前属性改变的百分比。

使用场景:实现非线性运动的动画效果。

系统内置的插值器:
  • LinearInterpolator: 默认的匀速
  • AccelerateInterpolator: 逐渐加速
  • DecelerateInterpolator: 逐渐减速
  • AccelerateDecelerateInterpolator: 先加速再减速
  • CycleInterpolator: 周期运动
  • OvershootInterpolator: 回弹效果
自定义差值器
差值器原理:根据动画的进度百分比计算出当前属性值改变的百分比。
自定义差值器做法:实现Interpolator接口,重写getInterpolation方法。

比如DecelerateInterpolator的部分代码:

public class DecelerateInterpolator extends BaseInterpolator implements NativeInterpolatorFactory {
    public DecelerateInterpolator() {
    }

    public DecelerateInterpolator(float factor) {
        mFactor = factor;
    }

    public DecelerateInterpolator(Context context, AttributeSet attrs) {
        this(context.getResources(), context.getTheme(), attrs);
    }

    public float getInterpolation(float input) {
        float result;
        if (mFactor == 1.0f) {
            result = (float)(1.0f - (1.0f - input) * (1.0f - input));
        } else {
            result = (float)(1.0f - Math.pow((1.0f - input), 2 * mFactor));
        }
        return result;
    }

    private float mFactor = 1.0f;
}

自定义MyInterpolator差值器:

public class MyInterpolator implements Interpolator {

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

}

估值器Evaluator

根据当前属性改变的百分比来计算改变后的属性值。

自定义估值器

实现TypeEvaluator接口,重写evaluate方法。

class MyEvaluator implements TypeEvaluator<Float> {

    @Override
    public Float evaluate(float fraction, Float startValue, Float endValue) {
        return (endValue-startValue)*fraction;
    }

}

fraction 动画完成度,也就是插值器getInterpolation()的返回,代表当前属性值改变的百分比
startValue参数:动画的初始值
endValue参数:动画的结束值

系统内置的估值器

IntEvaluator Int类型估值器,返回int类型的属性改变
FloatEvaluator Float类型估值器,返回Float类型属性改变
ArgbEvaluator 颜色类型估值器,返回16进制颜色值

相关文章

网友评论

    本文标题:差值器、估值器是什么

    本文链接:https://www.haomeiwen.com/subject/oucmrktx.html