Chcę zamienić dwa fragmenty w działaniu za pomocą animacji. Załóżmy, że Strona A jest dla frakcji A i lewa strona ekranu, a Strona B jest dla fragmentu B, tj. Po prawej stronie ekranu. Teraz chcę, aby po kliknięciu przycisku na stronie A strona A została przeniesiona na prawą stronę ekranu z animacją przejścia.
Wypróbowałem poniższy kod, aby zastąpić pozycję
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.container, new FragB());
fragmentTransaction.commit();
Szukam jakiejś wskazówki.
Z góry dziękuję.
android
android-animation
Deepak Goel
źródło
źródło
Odpowiedzi:
Stary questiion i prawdopodobnie już to rozgryzłeś, ale na przyszłość:
oto, czego używasz do ustawiania niestandardowej animacji, gdy zastępujesz fragment za pomocą kodu:
FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right); ft.replace(R.id.fragment_container, newFragment, "fragment"); // Start the animated transition. ft.commit();
Oto przykład animacji slide_in_left:
<?xml version="1.0" encoding="utf-8"?> <set> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:fromXDelta="-100%" android:toXDelta="0" android:interpolator="@android:anim/decelerate_interpolator" android:duration="500"/> </set>
Zwróć uwagę, że jest to animacja, jeśli używasz biblioteki zgodności. Zamiast tego, jeśli używasz i SDK z natywną obsługą FragmentManager, Twoja animacja będzie wyglądać następująco:
<?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>
Dzieje się tak, ponieważ biblioteka zgodności nie obsługuje nowego typu objectAnimator i zamiast tego implementuje tylko starą strukturę animacji.
źródło