我尝试按照android API GUIdes制作我的自定义插补器。 所以这就是插补器。
<?xml version="1.0" encoding="utf-8"?>
<customInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
android:factor="2"
/>
但是当我尝试在动画中使用它时:
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android">
android:fromXScale="1"
android:toXScale="5"
android:duration="3000"
android:interpolator="@anim/custom_interpolator"/>
</scale>
没有任何反应 - 视图只是刷新自己。这是为什么 ? 如果我尝试使用的原因是这样的:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:fromXScale="1"
android:toXScale="5"
android:duration="3000"
android:interpolator="@anim/custom_interpolator"/>
</set>
使用此代码:
AnimationSet animation = (AnimationSet)AnimationUtils.loadAnimation(AnimationActivity.this, R.anim.animation);
animationView.startAnimation(animation);
抛出异常:
java.lang.RuntimeException: Unknown interpolator name: customInterpolator
at android.view.animation.AnimationUtils.createInterpolatorFromXml(AnimationUtils.java:422)
at android.view.animation.AnimationUtils.loadInterpolator(AnimationUtils.java:285)
at android.view.animation.Animation.setInterpolator(Animation.java:391)
at android.view.animation.Animation.<init>(Animation.java:255)
at android.view.animation.ScaleAnimation.<init>(ScaleAnimation.java:63)
at android.view.animation.AnimationUtils.createAnimationFromXml(AnimationUtils.java:119)
at android.view.animation.AnimationUtils.createAnimationFromXml(AnimationUtils.java:115)
at android.view.animation.AnimationUtils.createAnimationFromXml(AnimationUtils.java:92)
at android.view.animation.AnimationUtils.loadAnimation(AnimationUtils.java:73)
at com.example.someone.studyproject.AnimationActivity$4.onClick(AnimationActivity.java:61)
at android.view.View.performClick(View.java:4633)
at android.view.View$PerformClick.run(View.java:19330)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5356)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
at dalvik.system.NativeStart.main(Native Method)
很奇怪,我从来没有用xml创建我的自定义插值器(我想在xml中只是为了练习它)。 提前谢谢。
现在我试试:
<scale
android:fromXScale="1"
android:toXScale="5"
android:pivotX="50%"
android:pivotY="50%"
android:duration="3000"/>
并且这不起作用 - 图片消失,5秒后它又回来了。这是为什么 ?为什么图片会消失而不是调整大小?
答案 0 :(得分:6)
看看它正在抛出的错误。 “customInterpolator”不是实际的插值器。你刚刚从零创建了那个标签。如果要修改它们,则必须使用内置的android插补器类。例如:
<强> customInterpolator.xml 强>
<accelerateInterpolator
xmlns:android="http://schemas.android.com/apk/res/android"
android:factor="2" />
请查看this link以了解Android中可用的不同类型的插值器。
如果您不想使用其中一个现有的android插补器,则可以通过编程方式创建自己的内插器。
<强> CubicAccelerateDecelerateInterpolator.java 强>
public class CubicAccelerateDecelerateInterpolator implements Interpolator
{
@Override
public float getInterpolation(float t)
{
float x = t * 2.0f;
if (t < 0.5f)
{
return 0.5f * x * x * x;
}
x = (t - 0.5f) * 2 - 1;
return 0.5f * x * x * x + 1;
}
}
如您所见,您需要创建一个函数,该函数返回0到1之间的插值值,时间 t 。 i = f( t )
注意:如果这样做,则无法在XML中引用此插值器。你必须以编程方式创建动画。