2013-07-20 9 views
61

Fragmentimle çalışmak için özel bir animasyon almaya çalışıyorum.Android FragmentTransaction Özel Animasyon (Bilinmeyen Animatör Adı: Çevir)

Online öğreticiler takip ettik ama aşağıdaki hatayı alıyorum: animasyon için XML altındadır

tercüme:

java.lang.RuntimeException: Bilinmeyen animatör adı:

<?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> 

Java dosyası aşağıda gösterilmiştir:

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

Diğer iş parçacıklarındaki çözümleri anlamada sorun yaşıyorum. Birisi benim için aşağılık dilerse, gerçekten takdir ediyorum.

Teşekkür

+0

Animasyonu Fragman desteği kitaplığı sürümü ile kullanıyorsanız, bu sizin sorununuz olabilir. –

cevap

92

Bu nesne animatör kullanmalısınız, işe yaramaz

animatör/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> 

animatör/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> 

Sınıf Alt kategori

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

Neden çalışmaz? açıklayabilir misin ? –

+0

Burada sorun ne yazıyor? Sorunu anlamadım, onun çalışmasıyla ne demek istiyorsunuz? –

+2

OP'in çözümünün işe yaramadığını ve açıklama talebinde bulunduğuna dair ifadenize atıfta bulunuyor. – Tom

106

Muhtemelen iki apis karıştırıyorsunuzdur. İki durum vardır:

  • Eğer destek v4 parçalarını kullanarak 3.0 veya altına hedefleme:, yani kullandığınız bir (onlar anim içine/go, eski animasyonlar api kullanmak zorunda ve vardır R.anim.thing)

  • Eğer 3.0 ve yerli parçalarını kullanarak yukarıdaki hedefliyorsanız: yeni animasyon apis kullanmak zorunda, yani ObjectAnimators (bunlar animatör gitmek/ve R.animator.thing vardır) 'dir. @minivac iki API'leri karıştırma cevap olarak

+1

Belgelerin neresinde yerel fragmanlar için nesne animatörlerini kullanmanız gerektiğini söyler misiniz? – kmdupr33

+0

Hem Api'nin kaynak kodunu kontrol ettim hem de tüm animasyon xml'nin res/anim klasörüne gitmesi gerektiğini buldum, animatöre ayrıştırma görmedim / –

0

. Lütfen, parça işlemlerine özel animasyonların nasıl ekleneceği hakkında daha fazla bilgi edinmek için Android eğitim kılavuzlarından Display Card Flip Animations örneğine bir göz atın. Tam olarak sorununuzu çözer.