gpt4 book ai didi

Android 动画自定义 Interpolar 问题 [overshotInterpolar]

转载 作者:搜寻专家 更新时间:2023-11-01 08:48:49 26 4
gpt4 key购买 nike

在我的应用中,我想使用overshootInterpolator[android.R.anim.overshoot_interpolator]。

现在我创建了我的自定义 overshootInterpolar,我在其中设置了我自己的超调值。但是在overshootInterpolar中默认效果是这样的它在开始时加速并减速,然后超调并返回。

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

这就是我尝试过的没有成功

<?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_accelerate_interpolar

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

属性: android:factor

说明:较大的值会导致较慢的初始运动和更快地加速到终点。

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

最佳答案

您正尝试通过在插值器资源中指定 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));
}

}

当然,您不需要使用 AccelerateInterpolatorOvershootInterpolatorgetInterpolation 方法可以将任何数学函数应用于输入。要将此插值器用于动画,您需要创建一个插值器实例并将其设置在您的动画中,如下所示。

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

有关插值器的概述以及如何实现您自己的插值器,您可以查看本教程 http://cogitolearning.co.uk/?p=1078

关于Android 动画自定义 Interpolar 问题 [overshotInterpolar],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25643360/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com