2013-07-20 17 views
61

Próbuję uzyskać niestandardową animację do pracy z moim fragmentem.Android Animacja niestandardowa FragmentTransaction (Nieznana nazwa animatora: Tłumacz)

I już po samouczki online, ale byłem coraz poniższy błąd:

java.lang.RuntimeException: nieznany Nazwa animator: Tłumaczenie

XML dla animacji jest poniżej:

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

plik Java przedstawiono poniżej:

public void goCategory(View v) {   
    FragmentTransaction ft = fm.beginTransaction();  
    ft.setCustomAnimations(R.animator.anim_in_left, R.animator.anim_out_left);    
    ft.show(fragment); 
    ft.commit(); 
} 

Mam problemy ze zrozumieniem rozwiązań w innych wątkach. Gdyby ktoś mógł mnie o tym zapomnieć, naprawdę bym to docenił.

Dzięki

+0

Jeśli używasz animacji z wersją fragmentu biblioteki pomocy technicznej, może to być Twój problem. –

Odpowiedz

92

To nie zadziała, należy użyć obiektu animator

animator/slide_in_left.xml

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

    <objectAnimator 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:duration="500" 
     android:propertyName="x" 
     android:valueFrom="1000" 
     android:valueTo="0" 
     android:valueType="floatType" /> 

</set> 

animator/slide_out_right.xml

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

    <objectAnimator 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:duration="500" 
     android:propertyName="x" 
     android:valueFrom="0" 
     android:valueTo="-1000" 
     android:valueType="floatType" /> 

</set> 

Klasa Podkategoria

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
       Bundle savedInstanceState) { 
      // TODO Auto-generated method stub 
      // return super.onCreateView(inflater, container, savedInstanceState); 

      View view = (ViewGroup) inflater.inflate(R.layout.product_frame, null); 
      getFragmentManager().beginTransaction() 
        .replace(R.id.sub_header, new Sub_Header()).commit(); 
      getFragmentManager() 
        .beginTransaction() 
        .setCustomAnimations(R.animator.slide_in_left, 
          R.animator.slide_out_right, 0, 0) 
        .replace(R.id.product_frame, new Sub_Catagory_Grid()).commit(); 

      view.getWidth(); 
      return view; 

     } 
+7

Dlaczego to nie działa? możesz wyjaśnić? –

+0

na czym polega problem, nie rozumiem twojego pytania, co masz na myśli mówiąc, że nie działa? –

+2

Odwołuje się do twojego oświadczenia, że ​​rozwiązanie PO nie zadziała i poprosi o wyjaśnienie. – Tom

106

Prawdopodobnie mieszacie dwa apisy. Istnieją dwa przypadki:

  • Jeśli kierowania poniżej 3,0 lub stosując fragmenty wsparcie v4: Musisz używać starego animacje API, to znaczy, że jedna używasz (idą do anim/i są R.anim.thing)

  • Jeśli są kierowane powyżej 3,0 i użyciu rodzimych fragmenty: trzeba korzystać z nowych interfejsów API animacji, czyli ObjectAnimators (idą do animatora/i są R.animator.thing).

+1

Czy wiesz, gdzie w dokumentacji jest napisane, że musisz używać animatorów obiektów do fragmentów natywnych? – kmdupr33

+0

Sprawdziłem kod źródłowy obu Api i odkryłem, że wszystkie animacje xml powinny przejść do folderu res/anim, nie widzę żadnego parsowania animatora / –

0

Ponieważ @minivac odpowiedział, że miksujesz dwa interfejsy API. Proszę zapoznać się z przykładem Display Card Flip Animations z przewodników szkoleniowych Android, aby uzyskać więcej informacji na temat dodawania niestandardowych animacji do transakcji fragmentacji. Rozwiązuje dokładnie twój problem.

Powiązane problemy