在Android上反转AccelerateDecelerateInterpolator

时间:2014-01-03 20:31:30

标签: android animation interpolation

我几乎都在寻找问题所暗示的内容 - DecelerateAccelerateInterpolator。我想要做的是让动画的前半部分减速,然后加速。 (我用它来模仿Bèzier曲线上的引力效应)。

编辑:

基本上,我正在寻找的是当物体沿着Bèzier曲线在屏幕上向上移动时,它会减速直到它到达顶部(此时它暂时停止,或者速度为0或者其他) ,然后它从另一边回来时开始加速。

3 个答案:

答案 0 :(得分:4)

尝试使用我的自定义插值器。你很受欢迎:)。

mAnimation.setInterpolator(new Interpolator() {

    @Override
    public float getInterpolation(float pInput) {
        System.out.println("input " + pInput);
        // (1-(1-(x*2))^3)/2
        return (float) (1 - Math.pow(1 - (2 * pInput), 3)) / 2;
    }
});

答案 1 :(得分:2)

我认为你实际上可以链接两个插值器。第一个是从时间0到时间1的DecelerateInterpolator,然后在时间1到时间2开始AccelerateInterpolator。基本上将时间分成两半。

答案 2 :(得分:1)

如果您使用的是Android API 21或更高版本,则可以将PathInterpolator与三次贝塞尔曲线一起使用:

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
    TimeInterpolator lInter = new PathInterpolator(0.0f, 0.97f, 1.0f, 0.03f);
    animation.setInterpolator(lInter);
}

这是一个不错的网站,可用来计算您想要的bezier curve values