【问题标题】:java.lang.RuntimeException: Unknown animation name: objectAnimatorjava.lang.RuntimeException:未知动画名称:objectAnimator
【发布时间】:2016-05-04 21:48:55
【问题描述】:

使用时出现此错误

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();

完美运行。但是我需要支持旧版本,所以我必须使用getSupportFragmentManager()来自的support-v4。

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

但还是不行,谁能告诉我该怎么办?

【问题讨论】:

    标签: android animation android-support-library


    【解决方案1】:

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

    【讨论】:

    • 我没有使用支持片段,仍然出现异常!
    【解决方案2】:

    如果您使用支持片段,请在 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)
    

    【讨论】:

    • 这不是我要找的答案,但是伙计!!它非常有用。
    猜你喜欢
    • 2013-05-17
    • 1970-01-01
    • 2013-10-08
    • 2013-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-04
    相关资源
    最近更新 更多