Java.lang.RuntimeException:未知的动画名称:objectAnimator

22

在使用时,我遇到了这个错误。

getActivity().getSupportFragmentManager()
                        .beginTransaction()
                        .setCustomAnimations(
                                R.animator.card_flip_right_in, R.animator.card_flip_right_out,
                                R.animator.card_flip_left_in, R.animator.card_flip_left_out)
                        .replace(R.id.content_fragment, new DaysSinceBirthSettingFragment())
                        .addToBackStack(null)
                        .commit();

但是当我将它改变为

getActivity().getFragmentManager()
                        .beginTransaction()
                        .setCustomAnimations(
                                R.animator.card_flip_right_in, R.animator.card_flip_right_out,
                                R.animator.card_flip_left_in, R.animator.card_flip_left_out)
                        .replace(R.id.content_fragment, new DaysSinceBirthSettingFragment())
                        .addToBackStack(null)
                        .commit();

它工作得很好,但我需要支持旧版本,所以我必须使用support-v4,其中getSupportFragmentManager()来自。

我读到一些文章说res/animator不受support-v4支持,因此我还尝试将我的动画XML文件移动到res/anim文件夹中,并通过R.anim.card_flip_right_in引用它。

但仍然无法正常工作,有人能告诉我该怎么办吗?

2个回答

25

支持片段管理器不支持动画器(仅支持动画)。异常消息表示您在xml资源中有错误格式的动画,可能是因为您已将动画器移到了该xml中,这是错误的(因为它们具有不同的符号表示法)。您需要以正确的方式编写它:http://developer.android.com/guide/topics/graphics/view-animation.html


我没有使用支持片段,但仍然出现异常! - Muhammad Babar

12

如果您正在使用支持片段,请在res中添加以下XML文件

以下是anim/fragment_slide_left_enter.xml文件的内容。

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="@android:integer/config_mediumAnimTime"
        android:fromXDelta="100%p"
        android:interpolator="@android:interpolator/decelerate_quint"
        android:toXDelta="0%p" />

    <alpha
        android:duration="@android:integer/config_mediumAnimTime"
        android:fromAlpha="0.0"
        android:interpolator="@android:interpolator/decelerate_quint"
        android:toAlpha="1.0" />
</set>

以下是 anim/fragment_slide_left_exit.xml 的内容。

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="@android:integer/config_mediumAnimTime"
        android:fromXDelta="0%p"
        android:interpolator="@android:interpolator/decelerate_quint"
        android:toXDelta="-100%p" />

    <alpha
        android:duration="@android:integer/config_mediumAnimTime"
        android:fromAlpha="1.0"
        android:interpolator="@android:interpolator/decelerate_quint"
        android:toAlpha="0.0" />
</set>

以下代码将是anim/fragment_slide_right_enter.xml文件的内容

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="@android:integer/config_mediumAnimTime"
        android:fromXDelta="-100%p"
        android:interpolator="@android:interpolator/decelerate_quint"
        android:toXDelta="0%p" />

    <alpha
        android:duration="@android:integer/config_mediumAnimTime"
        android:fromAlpha="0.0"
        android:interpolator="@android:interpolator/decelerate_quint"
        android:toAlpha="1.0" />
</set>

以下代码将成为anim/fragment_slide_right_exit.xml文件的内容。

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

    <translate
        android:duration="@android:integer/config_mediumAnimTime"
        android:fromXDelta="0%p"
        android:interpolator="@android:interpolator/decelerate_quint"
        android:toXDelta="100%p" />

    <alpha
        android:duration="@android:integer/config_mediumAnimTime"
        android:fromAlpha="1.0"
        android:interpolator="@android:interpolator/decelerate_quint"
        android:toAlpha="0.0" />
</set>

最后在你的片段转换代码中添加此行

ft.setCustomAnimations(R.anim.fragment_slide_left_enter,
                        R.anim.fragment_slide_left_exit,
                        R.anim.fragment_slide_right_enter,
                        R.anim.fragment_slide_right_exit)

1
这不是我想要的答案,但是哇!它非常有用。 - meyasir

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接