Android动画自定义极间问题[overshotInterpolar]

Android动画自定义极间问题[overshotInterpolar],android,android-animation,Android,Android Animation,在我的应用程序中,我想使用Overshootterpolator[android.R.anim.overshoot\u interpolator] 现在,我创建了我的自定义超调太阳镜,在其中我设置了自己的超调值。 但默认情况下,在Overshootterpolar中,效果如下 它一开始就加速,然后减速,然后超调回来 我想要的是它不应该在一开始就加速 这就是我尝试过的 无功而返 <?xml version="1.0" encoding="utf-8"?> <overshootIn

在我的应用程序中,我想使用Overshootterpolator[android.R.anim.overshoot\u interpolator]

现在,我创建了我的自定义超调太阳镜,在其中我设置了自己的超调值。 但默认情况下,在Overshootterpolar中,效果如下 它一开始就加速,然后减速,然后超调回来

我想要的是它不应该在一开始就加速

这就是我尝试过的 无功而返

<?xml version="1.0" encoding="utf-8"?>
<overshootInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@anim/hdr_accelerate_interpolar"
    android:tension="1.3" />

属性:android:tension

说明:张力的大小,默认值为2。 张力越大,超调越小,越快

@anim/hdr\u加速\u国际极

<?xml version="1.0" encoding="utf-8"?>
<accelerateInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
    android:factor="2" />

属性:android:factor

说明:较大的值会导致较慢的初始运动和 在接近终点时加速更快


我的问题:加速interpolar没有生效。

您试图通过在插值器资源中指定一个
android:interpolator
属性,将两个插值器合并为一个插值器。不幸的是,使用XML资源不可能做到这一点,您必须将自定义插值器作为Java类编写,并以编程方式在动画上设置插值器

例如,插值器可能如下所示

public class AccelerateOvershootInterpolator implements Interpolator
{
  private AccelerateInterpolator accelerate;
  private OvershootInterpolator overshoot;

  public AccelerateOvershootInterpolator(float factor, float tension)
  {
    accelerate = new AccelerateInterpolator(factor);
    overshoot = new OvershootInterpolator(tension);
  }

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

}
Animation animation = AnimationUtils.loadAnimation(this, R.anim.my_animation);
AccelerateOvershootInterpolator interpolator = new AccelerateOvershootInterpolator(2.0f,  1.7f);
animation.setInterpolator(interpolator);
animatedView.startAnimation(animation);
当然,您不需要使用
加速器插值器
超调插值器
getInterpolation
方法可以对输入应用任何数学函数。要将此插值器用于动画,需要创建插值器的实例并在动画中设置它,如下所示

public class AccelerateOvershootInterpolator implements Interpolator
{
  private AccelerateInterpolator accelerate;
  private OvershootInterpolator overshoot;

  public AccelerateOvershootInterpolator(float factor, float tension)
  {
    accelerate = new AccelerateInterpolator(factor);
    overshoot = new OvershootInterpolator(tension);
  }

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

}
Animation animation = AnimationUtils.loadAnimation(this, R.anim.my_animation);
AccelerateOvershootInterpolator interpolator = new AccelerateOvershootInterpolator(2.0f,  1.7f);
animation.setInterpolator(interpolator);
animatedView.startAnimation(animation);

有关插值器以及如何实现自己的插值器的概述,请参阅本教程

开始时应做什么?您已经说明了预期行为,但观察到的行为是什么?当你使用你的代码时会发生什么?有动画吗?如果有,它会做什么?我添加的accelerate\u interpolar没有任何效果,也就是说,即使我添加了这个android:interpolator=“@anim/hdr\u accelerate\u interpolar”,Overshootterpolar仍然保持不变