54

Arka yığının FragmentTransactions kapalı tutmanın özel animasyonlarını nasıl işlediğini anlamada veya kullanmada sorun yaşıyorum. Özellikle, "dışarı" animasyonunu çağırmasını beklerim, ancak görünmüyor. Animasyon parçaları ve arka yığın

I fragmanı eklemek bir fragmanı işlem (FragmentTransaction) işlemek ve solmaya olarak böylece/fade Çıkış özel bir geçişi uygulamak için basit bir yöntem vardır. Ben de arka yığına ekliyorum, böylece kullanıcı geri düğmesiyle bu işlemi geri alabilir, temel olarak parçaya parçasının eklenmesinden önceki duruma doğru seyredebilir.

protected void changeFragment() { 
    FragmentTransaction ft = fm.beginTransaction(); 
    ft.setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out); 
    ft.add(R.id.fragment_container, new TestFragment()); 
    ft.addToBackStack(null); 
    ft.commit(); 
} 

Her şey ilerlemeye çalıştığını, ancak kullanıcı geri düğmesini tıkladığında, geçiş animasyonları ters yoktur. 'dan beklediğim şey, fragman kaldırıldığında, animasyonunun sönmesini kullanmasıydı. Bunun yerine (animasyon olmadan) ve daha sonra konteynerin içinde kaybolur gibi gözüküyor gibi görünüyor. Ben tam olarak bu oluyor, ancak parça kesinlikle solma değil emin değilim.

Uygulamam, parça desteği eklemek için uyumluluk kitaplığını kullanıyor, Ancak bunun, Honeycomb (android-11) için de geçerli olduğunu varsayalım. Burada yanlış bir şey yapıyorum ya da ben sadece çok fazla mı bekliyoruz bilen var mı? İdeal olarak, fragmanlarını benzer şekilde Gmail'in (Xoom üzerinde) mesajını bir mesaj tıklatıp daha sonra geri düğmesini kullanarak nasıl geri döndürdüğüne benzer şekilde canlandırmak istiyorum. Tercihen işlevselliğini geri çevirmek zorunda kalmam ve 'un geri dönmesini istediğim birkaç "işlem" yapabildiğim için kendi parça durumuma devam etmem gerekiyor ve ben yeniden tekerlekleri yeniden icat eden bir fan değilim.

Ayrıca Android Geliştiricileri Grubu sorular: http://groups.google.com/group/android-developers/browse_thread/thread/1136a3a70fa0b6e9

+3

Bu sorunla da karşılaştım ve http://code.google.com/p/android/issues/detail?id=15623&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars – Damian

+0

adresinden bir hata raporu gönderdim Yukarıdaki hata raporunu sen başlat. – Damian

+0

Yıldızlı. Bunu boog olarak gönderdiğiniz için teşekkür ederiz. Bunu yapmadan önce başka bir şey almak istiyordum. –

cevap

29

hata aşağıdaki yeni API eklenmesiyle 3.2 sürümde giderilmiştir:

http://developer.android.com/reference/android/app/FragmentTransaction.html#setCustomAnimations(int, int, int, int)

It henüz uyumluluk kütüphaneye geri portlu edilmediğini belirtmek için (hata raporunda belirtildiği gibi).

+1

Uyumluluk kitaplığının en son sürümü (r4) artık bu düzeltmeye sahip. – blazeroni

+1

Uyumluluk kitaplığının en son sürümünü kullanıyorum ama her aramayı denediğimde bir "Bilinmeyen animasyon adı: objectAnimator" istisnası alıyorum. – powerj1984

+0

Desteğinizle animasyonu yalnızca nesne animatörü değil, xml biçiminde kullanabilirsiniz. – Snicolas

5

O bug report 15623 bakmak, bir sinek. Android proje üyelerinden biri, düzeltmenin 3.1 sürümü için çok geç olduğunu belirtti, ancak bunu bir sonraki sürümde yapması gerekti.

aynı üyesi olduğunu söylemeye devam ediyor ...

sorun mevcut yerlerinde parçaları koymak için çalıştırıldı aynı animasyonlar bir pop operasyonu çalıştırmak olmasıdır. Örneğin, yukarıda belirtilen kayar örnek olarak, bir ileri işlem (yığını üzerine eski fragmanını itme ve görünüme yeni fragmanı taşıma), biz sol ve slayt merkezden dışarı eski fragmanını slayt sağdan merkeze doğru numaralı yeni parça. yığın attı zaman, bu, aynı animasyonlar çalıştırılır: En son fragman merkeze gelen içinde sağ kaydırarak dışarı doğru hareketli olan (bu kaybolduğu sonra, işlemine tabi tutulur beri). Eski parça yığınından atılır ve merkezinden sola doğru hareket eder ... ekranından sağa.

49

Bunu kullanın:

ft.setCustomAnimations(R.anim.slide_in, R.anim.hyperspace_out, R.anim.hyperspace_in, R.anim.slide_out); 

ve geri düğmesi presler olduğunda geçişler tersten çalışır.

+10

Siz, efendim, erkekler arasında bir Tanrı vardır. – Guardanis

+0

Mükemmel! çok teşekkürler! – datayeah

+0

bu kolay bir çözümdü –