代码之家  ›  专栏  ›  技术社区  ›  dimsuz

在Android1.5上从XML加载动画失败:“未知的插补器名称:set”。如何修复?

  •  1
  • dimsuz  · 技术社区  · 14 年前

    我在XML中指定了一个动画,如下所示:

    <?xml version="1.0" encoding="utf-8"?>
    
    <set xmlns:android="http://schemas.android.com/apk/res/android">
    ·       <translate android:fromXDelta="0" android:toXDelta="100%p" android:duration="300" android:interpolator="@android:anim/anticipate_overshoot_interpolator" />
    ·       <alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="300" />
    </set>
    

    这个文件是res/anim/push-right-in.xml

    然后在Java代码中,我尝试这样加载:

    mAnimationRightIn = AnimationUtils.loadAnimation(this, R.anim.push_right_in);
    

    clock.ClockSelectActivity}: java.lang.RuntimeException: Unknown interpolator name: set
    E/AndroidRuntime(  682):        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2268)
    E/AndroidRuntime(  682):        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2284)
    E/AndroidRuntime(  682):        at android.app.ActivityThread.access$1800(ActivityThread.java:112)
    E/AndroidRuntime(  682):        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1692)
    E/AndroidRuntime(  682):        at android.os.Handler.dispatchMessage(Handler.java:99)
    E/AndroidRuntime(  682):        at android.os.Looper.loop(Looper.java:123)
    E/AndroidRuntime(  682):        at android.app.ActivityThread.main(ActivityThread.java:3948)
    E/AndroidRuntime(  682):        at java.lang.reflect.Method.invokeNative(Native Method)
    E/AndroidRuntime(  682):        at java.lang.reflect.Method.invoke(Method.java:521)
    E/AndroidRuntime(  682):        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
    E/AndroidRuntime(  682):        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
    E/AndroidRuntime(  682):        at dalvik.system.NativeStart.main(Native Method)
    E/AndroidRuntime(  682): Caused by: java.lang.RuntimeException: Unknown interpolator name: set
    E/AndroidRuntime(  682):        at android.view.animation.AnimationUtils.createInterpolatorFromXml(AnimationUtils.java:321)
    E/AndroidRuntime(  682):        at android.view.animation.AnimationUtils.loadInterpolator(AnimationUtils.java:270)
    E/AndroidRuntime(  682):        at android.view.animation.Animation.setInterpolator(Animation.java:290)
    E/AndroidRuntime(  682):        at android.view.animation.Animation.<init>(Animation.java:213)
    E/AndroidRuntime(  682):        at android.view.animation.TranslateAnimation.<init>(TranslateAnimation.java:54)
    E/AndroidRuntime(  682):        at android.view.animation.AnimationUtils.createAnimationFromXml(AnimationUtils.java:115)
    E/AndroidRuntime(  682):        at android.view.animation.AnimationUtils.createAnimationFromXml(AnimationUtils.java:107)
    E/AndroidRuntime(  682):        at android.view.animation.AnimationUtils.createAnimationFromXml(AnimationUtils.java:84)
    E/AndroidRuntime(  682):        at android.view.animation.AnimationUtils.loadAnimation(AnimationUtils.java:64)
    E/AndroidRuntime(  682):        at com.the7art.rockclock.ClockSelectActivity.onCreate(ClockSelectActivity.java:46)
    E/AndroidRuntime(  682):        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
    E/AndroidRuntime(  682):        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2231)
    E/AndroidRuntime(  682):        ... 11 more
    

    我在Android的API示例中检查了一些XML定义的动画示例,它们包含几乎相同的代码,具有不同的参数,所以我想它确实可以工作。

    我看到一种方法是停止用XML定义它们并在代码中创建动画,但我想知道是否还有一种方法可以用XML来实现它:)

    2 回复  |  直到 13 年前
        1
  •  0
  •   dimsuz    14 年前

    它崩溃是因为我在第一个anim标签中有“android:interpolator=”@android:anim/expective_overshoot_interpolator“属性。无论如何,它都不起作用(因为它需要android:shareInterpolator=“false”在标签中才能起作用),所以我刚刚删除了这个。

    我想这是Android 1.5的漏洞:)

        2
  •  0
  •   firebear    13 年前

    在android 1.5中,解决方案是删除“android:interpolator=”@android:anim/expective_overshoot_interpolator“