Фрагмент: Неизвестное название анимации objectanimator

Я пытаюсь сделать анимацию переворачивания карты между двумя фрагментами, как в --> Отображение переворота карты Анимации с использованием:

private void switchFragment(Fragment fragment) {
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager
                .beginTransaction();

        if ((fragment != null) && !(fragment.equals(currentFragment))) {

            if (transactionByMenu) {
                fragmentTransaction.setCustomAnimations(android.R.anim.fade_in,
                        android.R.anim.fade_out);
            } else {
                fragmentTransaction.setCustomAnimations(
                        R.animator.card_flip_right_in,
                        R.animator.card_flip_right_out);
            }

            Fragment nextFragment = fragment;
            fragmentTransaction.hide(currentFragment);
            fragmentTransaction.show(nextFragment);

            currentFragment = nextFragment;
        }
        fragmentTransaction.commit();
    }

Транзакция в if(transactionByMenu){...} работает, но не в else{...}

Я бы проверил свои библиотеки и прочее, и в настоящее время я нацелен выше, чем api 11, но у меня все еще есть это сообщение об ошибке:

05-22 11:32:34.706: E/AndroidRuntime(6801): FATAL EXCEPTION: main
05-22 11:32:34.706: E/AndroidRuntime(6801): java.lang.RuntimeException: Unknown animation name: objectAnimator
05-22 11:32:34.706: E/AndroidRuntime(6801):     at android.view.animation.AnimationUtils.createAnimationFromXml(AnimationUtils.java:124)
05-22 11:32:34.706: E/AndroidRuntime(6801):     at android.view.animation.AnimationUtils.createAnimationFromXml(AnimationUtils.java:114)
05-22 11:32:34.706: E/AndroidRuntime(6801):     at android.view.animation.AnimationUtils.createAnimationFromXml(AnimationUtils.java:91)
05-22 11:32:34.706: E/AndroidRuntime(6801):     at android.view.animation.AnimationUtils.loadAnimation(AnimationUtils.java:72)
05-22 11:32:34.706: E/AndroidRuntime(6801):     at android.support.v4.app.FragmentManagerImpl.loadAnimation(FragmentManager.java:710)
05-22 11:32:34.706: E/AndroidRuntime(6801):     at android.support.v4.app.FragmentManagerImpl.hideFragment(FragmentManager.java:1187)
05-22 11:32:34.706: E/AndroidRuntime(6801):     at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:610)
05-22 11:32:34.706: E/AndroidRuntime(6801):     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1431)
05-22 11:32:34.706: E/AndroidRuntime(6801):     at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:420)
05-22 11:32:34.706: E/AndroidRuntime(6801):     at android.os.Handler.handleCallback(Handler.java:725)
05-22 11:32:34.706: E/AndroidRuntime(6801):     at android.os.Handler.dispatchMessage(Handler.java:92)
05-22 11:32:34.706: E/AndroidRuntime(6801):     at android.os.Looper.loop(Looper.java:137)
05-22 11:32:34.706: E/AndroidRuntime(6801):     at android.app.ActivityThread.main(ActivityThread.java:5041)
05-22 11:32:34.706: E/AndroidRuntime(6801):     at java.lang.reflect.Method.invokeNative(Native Method)
05-22 11:32:34.706: E/AndroidRuntime(6801):     at java.lang.reflect.Method.invoke(Method.java:511)
05-22 11:32:34.706: E/AndroidRuntime(6801):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
05-22 11:32:34.706: E/AndroidRuntime(6801):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
05-22 11:32:34.706: E/AndroidRuntime(6801):     at dalvik.system.NativeStart.main(Native Method)

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="package.stage.stackoverflow"
    android:versionCode="3"
    android:versionName="2.0.1" >

    <uses-sdk
        android:minSdkVersion="11"
        android:targetSdkVersion="17" />

    <permission
        android:name="package.stage.stackoverflow.permission.MAPS_RECEIVE"
        android:protectionLevel="signature" />

    <uses-permission android:name="package.stage.stackoverflow.permission.MAPS_RECEIVE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />

    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/SampleTheme" >
        <uses-library android:name="com.google.android.maps" />

        <activity
            android:name="package.stage.stackoverflow.MyFragmentActivity"
            android:label="@string/app_name"
            android:launchMode="singleTop"
            android:screenOrientation="portrait" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="my Key" />
    </application>

</manifest>

Прошло два дня, я застрял с этим, спасибо заранее.


person Glenn Sonna    schedule 22.05.2013    source источник
comment
не могли бы вы попробовать пользовательскую анимацию вместо android.R.anim.fade_in и fade_out   -  person OMAK    schedule 22.05.2013
comment
О, извините, я отредактировал свой, он не скопировал/вставил правильную инструкцию. На самом деле это fragmentTransaction.setCustomAnimations( R.animator.card_flip_left_in, R.animator.card_flip_left_out);   -  person Glenn Sonna    schedule 22.05.2013
comment
Вы можете добавить полный код для транзакции фрагмента?   -  person OMAK    schedule 22.05.2013
comment
Редактирование выполнено: транзакция в if(transactionByMenu){...} работает, но не в else{...}   -  person Glenn Sonna    schedule 22.05.2013
comment
Я думаю, проблема связана с вашим animator.card_flip_right_in, не могли бы вы также указать код этого? Обычно мы добавляем анимацию в папку anim и получаем к ней доступ с помощью R.anim.animation_name.   -  person OMAK    schedule 22.05.2013
comment
Я использовал тот же XML, что и в --› Отображение анимации переворачивания карты   -  person Glenn Sonna    schedule 22.05.2013


Ответы (3)


Я полагаю, вы пытаетесь использовать objectAnimator в библиотеке фрагментов поддержки, но он был добавлен в Android Api level 11.

person DoruAdryan    schedule 24.05.2013
comment
тогда вы должны использовать getFragmentManager вместо getSupportFragmentManager. - person DoruAdryan; 30.05.2013
comment
Итак, я не могу использовать его с фрагментом поддержки или Шерлоком на 11, вот и все? - person Glenn Sonna; 30.05.2013
comment
Если ваше приложение нацелено на minSDKVersion - 11, то нет необходимости использовать getSupportFragmentManager, поскольку можно использовать getFragmentManager(), а затем вы также можете использовать objectAnimator. - person DoruAdryan; 31.05.2013
comment
и что, если я хочу использовать его с библиотекой поддержки? - person Glenn Sonna; 31.05.2013
comment
тогда вы не можете использовать ObjectAnimator, поэтому вам придется создавать анимацию флипа по-другому, просто так :) - person DoruAdryan; 31.05.2013
comment
Большое спасибо за этот ответ, я понял это по-другому: ТУТ - person Glenn Sonna; 31.05.2013
comment
@GlennSonna Можете ли вы сообщить нам, какой другой способ сработал для вас? - person Vinayak Bevinakatti; 20.08.2014
comment
Учебник, который вы разместили в ТАМ, не о проблеме. Пока еще нет решения этого вопроса! - person Yvonne Marggraf; 26.08.2016

Если вы объявили объектную анимацию в XML-файле, обязательно поместите его в папку animator, а не в папку anim, чтобы указать Android использовать новую структуру анимации.

Вот из документации:

Чтобы отличить файлы анимации, в которых используются новые API анимации свойств, от тех, которые используют устаревшую структуру анимации представлений, начиная с Android 3.1, вы должны сохранять XML-файлы для анимации свойств в каталоге res/animator/ (вместо res/ аним/). Использование имени каталога аниматора необязательно, но необходимо, если вы хотите использовать инструменты редактора компоновки в подключаемом модуле Eclipse ADT (ADT 11.0.0+), поскольку ADT ищет ресурсы анимации свойств только в каталоге res/animator/.

person ArnaudR    schedule 14.08.2014

person    schedule
comment
Что такое commentFragment.setArguments(b);? Я не могу использовать замену, которая мне нужна, чтобы сохранить все состояния моих фрагментов, поэтому я предпочитаю показывать/скрывать. - person Glenn Sonna; 22.05.2013
comment
Используя setArguments, вы можете прикрепить Bundle, а затем в своем фрагменте вы можете вызвать getArguments для получения любых значений, которые вы прикрепляете к пакету. Это полезный способ передачи определенных типов информации во фрагмент при создании нового экземпляра. - person speedynomads; 31.07.2013