带有两个插值器的动画

时间:2012-08-10 19:20:14

标签: java android animation interpolation

我需要使用两个插值器进行动画制作,例如动画的持续时间为1秒,持续时间为0秒至0.5秒,使用加速插值法0.5秒至1秒使用反弹插补器。

有办法做到这一点吗?

3 个答案:

答案 0 :(得分:11)

您可以尝试这样的事情:

<?xml version="1.0" encoding="utf-8"?>
<set 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false">

<translate
    android:interpolator="@android:anim/bounce_interpolator"
    android:fromYDelta="0%p"
    android:toYDelta="100"
    android:duration="500"/>

<translate
    android:interpolator = "@android:anim/accelerate_interpolator"
    android:fromYDelta="100"
    android:toYDelta="100"
    android:fromXDelta="0"
    android:toXDelta="100"
    android:startOffset="500"
    android:duration="1000"/>

</set>

这使用两个interpolators,第一个是反弹,将视图移动一半。第二个interpolator是加速interpolator,它在一秒钟过了一半之后将视图向右移动,持续时间为一秒。因此总动画时间为1秒。希望有所帮助。

答案 1 :(得分:11)

我只使用一个动画:

Animation animation = new TranslateAnimation(0,100,0,0);
animation.setDuration(1000);
pointerAnimation.setInterpolator(new CustomBounceInterpolator(500));
view.startAnimation(animation);

和CustomInterpolator类:

public class CustomBounceInterpolator implements Interpolator {

private float timeDivider;
private AccelerateInterpolator a;
private BounceInterpolator b;

public CustomBounceInterpolator(float timeDivider) {
    a = new AccelerateInterpolator();
    b = new BounceInterpolator();
    this.timeDivider = timeDivider;
}

public float getInterpolation(float t) {
    if (t < timeDivider)
        return a.getInterpolation(t);
    else
        return b.getInterpolation(t);
}

}

答案 2 :(得分:3)

示例中的Hello是匿名类失败的。

不是这个:pointerAnimation.setInterpolator(new CustomInterpolator(500));

就是这样:pointerAnimation.setInterpolator(new CustomBounceInterpolator(500));

非常感谢无论如何帮助了我很多