Java.lang.RuntimeException: Неизвестное имя анимации: objectAnimator

Я получаю эту ошибку при использовании

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

Он отлично работает. но мне нужно поддерживать более старую версию, поэтому я должен использовать поддержку-v4, из которой getSupportFragmentManager().

Я прочитал статью о том, что res/animator не поддерживается поддержкой-v4, поэтому я также попытался переместить мои XML файлы анимации в папку res/anim и ссылаться на нее R.anim.card_flip_right_in

Но все же это не сработало, кто-нибудь может сказать мне, что я могу сделать?

Ответы

Ответ 1

Поддержка диспетчера фрагментов не поддерживает аниматоров (только анимации). Сообщение об исключении говорит, что у вас неправильный формат анимации в вашем ресурсе xml, возможно, потому, что вы переместили аниматор в этот xml, который неверен (потому что у них разные обозначения). Вы должны написать его соответствующим образом: http://developer.android.com/guide/topics/graphics/view-animation.html

Ответ 2

если вы используете фрагмент поддержки, добавьте ниже xml файлы в res

Ниже приведен контент файла 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)