- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在我的应用中,我想使用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));
}
}
当然,您不需要使用 AccelerateInterpolator
或 OvershootInterpolator
。 getInterpolation
方法可以将任何数学函数应用于输入。要将此插值器用于动画,您需要创建一个插值器实例并将其设置在您的动画中,如下所示。
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/
在我的应用中,我想使用overshootInterpolator[android.R.anim.overshoot_interpolator]。 现在我创建了我的自定义 overshootInterp
我是一名优秀的程序员,十分优秀!