Aby animować przejście między fragmentami lub animować proces pokazywania lub ukrywania fragmentu, którego używasz Fragment Manager
do utworzenia pliku Fragment Transaction
.
W ramach każdej transakcji fragmentu możesz określić animacje wchodzące i wychodzące, które będą używane odpowiednio do pokazywania i ukrywania (lub obu, gdy używana jest zamiana).
Poniższy kod pokazuje, jak zastąpić fragment, przesuwając jeden fragment i przesuwając drugi na swoim miejscu.
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);
DetailsFragment newFragment = DetailsFragment.newInstance();
ft.replace(R.id.details_fragment_container, newFragment, "detailFragment");
// Start the animated transition.
ft.commit();
Aby osiągnąć to samo z ukryciem lub pokazaniem fragmentu, który po prostu nazwiesz, ft.show
lub ft.hide
przekazaniem fragmentu, który chcesz odpowiednio pokazać lub ukryć.
W celach informacyjnych definicje animacji XML wykorzystują objectAnimator
znacznik. Przykład slide_in_left może wyglądać mniej więcej tak:
<?xml version="1.0" encoding="utf-8"?>
<set>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:propertyName="x"
android:valueType="floatType"
android:valueFrom="-1280"
android:valueTo="0"
android:duration="500"/>
</set>
Jeśli nie musisz korzystać z biblioteki wsparcia, spójrz na odpowiedź Romana .
Ale jeśli chcesz użyć biblioteki wsparcia , musisz użyć starej ramy animacji, jak opisano poniżej.
Po zapoznaniu się z odpowiedziami Reto i blindstuff otrzymałem następujący kod.
Fragmenty wydają się przesuwać z prawej strony i przesuwać w lewo po naciśnięciu tyłu.
Kolejność jest ważna. Oznacza to, że musisz
setCustomAnimations()
wcześniej zadzwonić,replace()
inaczej animacja nie zadziała!Następnie pliki te należy umieścić w folderze res / anim .
enter.xml :
exit.xml :
pop_enter.xml :
pop_exit.xml :
Czas trwania animacji można zmienić na dowolną z domyślnych wartości, takich jak
@android:integer/config_shortAnimTime
lub na dowolną inną liczbę.Zauważ, że jeśli pomiędzy wymianami fragmentów nastąpi zmiana konfiguracji (na przykład obrót), działanie wsteczne nie jest animowane. Jest to udokumentowany błąd, który nadal występuje w wersji 20 biblioteki wsparcia.
źródło
Zdecydowanie sugeruję użycie tego zamiast tworzenia pliku animacji, ponieważ jest to znacznie lepsze rozwiązanie. Android Studio zapewnia już domyślną opcję,
animation
której można używać bez tworzenia nowego pliku XML. Nazwy animacji to android.R.anim.slide_in_left i android.R.anim.slide_out_right i można ich używać w następujący sposób:Wynik:
źródło
Moja zmodyfikowana biblioteka obsługi obsługuje zarówno wyświetlanie animacji (tj.
<translate>, <rotate>
), Jak i animatorów obiektów (tj.<objectAnimator>
) Dla przejść fragmentów. Jest zaimplementowany z NineOldAndroids . Szczegółowe informacje znajdują się w mojej dokumentacji na github.źródło
Jeśli chodzi o mnie, potrzebuję widoku diraction:
Oto działa dla mnie kod:
slide_in_right.xml
slide_out_left.xml
kod transakcji:
źródło
Rozwiązuję to w następujący sposób
źródło