2013-05-22 3 views
29

Я пытаюсь сделать листать карты анимации между двумя фрагмента, как в ->Displaying Card Flip Animations с помощью:Фрагмент: Неизвестное имя анимации 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{...}

я бы проверить мою LIBS и вещи, и я в настоящее время выше, чем целевую 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> 

Это было два дня I'am застрял с этим, спасибо заранее.

+0

Вы можете попробовать пользовательскую анимацию вместо android.R.anim.fade_in и fade_out – OMAK

+0

О, извините, я отредактировал мой файл, не скопировал/вставил нужную инструкцию. На самом деле это 'fragmentTransaction.setCustomAnimations ( \t \t \t R.animator.card_flip_left_in, \t \t \t R.animator.card_flip_left_out);' –

+0

можно добавить полный код транзакции фрагмент? – OMAK

ответ

49

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

+2

Да, но мин манифест my minSDKVersion составляет 11 ... –

+3

, тогда вы должны использовать getFragmentManager вместо getSupportFragmentManager. – DoruAdryan

+0

Хорошо, поэтому я не могу использовать его с фрагментом поддержки или Шерлоком на 11-ом? –

3
FragmentManager fragmentManager = getActivity().getSupportFragmentManager(); 
       FragmentTransaction fragmentTransaction = fragmentManager 
         .beginTransaction(); 
       fragmentTransaction.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left,R.anim.slide_in_left, R.anim.slide_out_right); 
       ProductOverview commentFragment = new ProductOverview(); 
       commentFragment.setArguments(b); 
       fragmentTransaction.replace(R.id.product_container, commentFragment); 
       fragmentTransaction.addToBackStack(null); 
       fragmentTransaction.commit(); 
+1

Что такое 'commentFragment.setArguments (b);'? Я не могу использовать замену, которую мне нужно, чтобы сохранить все состояния моих фрагментов, поэтому я предпочитаю использовать show/hide. –

+0

С помощью setArguments вы можете присоединить Bundle, а затем в своем фрагменте вы можете вызвать getArguments для получения любых значений, которые вы присоединяете к набору. Это полезный способ передачи определенных типов информации во фрагмент при создании нового экземпляра. – speedynomads

18

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

Вот от documentation:

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

Смежные вопросы