
alexanderblom
Wie sollten Sie die Art von Gleiten implementieren, die beispielsweise der Honeycomb Gmail-Client verwendet?
dürfen TransactionManager
Behandeln Sie dies automatisch, indem Sie die Fragmente hinzufügen und entfernen. Es ist etwas schwierig, dies zu testen, da der Emulator eine Diashow ist 🙂

Reto Meier
Um den Übergang zwischen Fragmenten zu animieren oder den Vorgang des Ein- oder Ausblendens eines Fragments zu animieren, verwenden Sie die Fragment Manager
ein zu erstellen Fragment Transaction
.
Innerhalb jeder Fragment-Transaktion können Sie In- und Out-Animationen angeben, die zum Ein- und Ausblenden verwendet werden (oder beides, wenn Ersetzen verwendet wird).
Der folgende Code zeigt, wie Sie ein Fragment ersetzen würden, indem Sie ein Fragment herausschieben und das andere an seine Stelle schieben.
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();
Um dasselbe mit dem Ausblenden oder Anzeigen eines Fragments zu erreichen, rufen Sie einfach auf ft.show
oder ft.hide
indem Sie das Fragment übergeben, das Sie ein- bzw. ausblenden möchten.
Als Referenz würden die XML-Animationsdefinitionen die verwenden objectAnimator
Schild. Ein Beispiel für slide_in_left könnte so aussehen:
<?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>

dmanargien
Wenn Sie die Support-Bibliothek nicht verwenden müssen, sehen Sie sich Romans Antwort an.
Aber wenn Sie die verwenden möchten Bibliothek unterstützen Sie müssen das alte Animationsframework wie unten beschrieben verwenden.
Nachdem ich die Antworten von Reto und Blindstuff konsultiert habe, habe ich den folgenden Code zum Laufen gebracht.
Die Fragmente erscheinen von rechts einschieben und nach links herausrutschen wenn zurück gedrückt wird.
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.setCustomAnimations(R.anim.enter, R.anim.exit, R.anim.pop_enter, R.anim.pop_exit);
CustomFragment newCustomFragment = CustomFragment.newInstance();
transaction.replace(R.id.fragment_container, newCustomFragment );
transaction.addToBackStack(null);
transaction.commit();
Die Reihenfolge ist wichtig. Das heißt, Sie müssen anrufen setCustomAnimations()
Vor replace()
oder die Animation wird nicht wirksam!
Als nächstes müssen diese Dateien in die res/anim Mappe.
enter.xml:
<?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="@android:integer/config_mediumAnimTime"/>
</set>
exit.xml:
<set>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="0"
android:toXDelta="-100%"
android:interpolator="@android:anim/accelerate_interpolator"
android:duration="@android:integer/config_mediumAnimTime"/>
</set>
pop_enter.xml:
<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="@android:integer/config_mediumAnimTime"/>
</set>
pop_exit.xml:
<?xml version="1.0" encoding="utf-8"?>
<set>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="0"
android:toXDelta="100%"
android:interpolator="@android:anim/accelerate_interpolator"
android:duration="@android:integer/config_mediumAnimTime"/>
</set>
Die Dauer der Animationen kann auf einen der Standardwerte wie geändert werden @android:integer/config_shortAnimTime
oder irgendeine andere Zahl.
Beachten Sie, dass die Zurück-Aktion nicht animiert wird, wenn zwischen Fragmentersetzungen eine Konfigurationsänderung stattfindet (z. B. Rotation). Das ist ein dokumentierter Fehler das existiert noch in der Version 20 der Support-Bibliothek.

Gowthaman M
Ich würde Ihnen dringend empfehlen, dies zu verwenden, anstatt die Animationsdatei zu erstellen, da dies eine viel bessere Lösung ist. Android Studio bietet bereits Ursprünglich animation
Sie können verwenden, ohne eine neue XML-Datei zu erstellen. Die Namen der Animationen sind android.R.anim.slide_in_left und android.R.anim.slide_out_right und Sie können sie wie folgt verwenden:
fragmentTransaction.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right);
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right);
fragmentManager.addOnBackStackChangedListener(this);
fragmentTransaction.replace(R.id.frame, firstFragment, "h");
fragmentTransaction.addToBackStack("h");
fragmentTransaction.commit();
Ausgabe:

Meine modifiziert Bibliothek unterstützen unterstützt die Verwendung beider Ansichtsanimationen (dh <translate>, <rotate>
) und Objektanimatoren (dh <objectAnimator>
) für Fragmentübergänge. Es wird mit implementiert NineOldAndroids. Weitere Informationen finden Sie in meiner Dokumentation auf Github.
Was mich betrifft, ich brauche die Blickrichtung:
in -> von rechts wischen
raus -> nach links wischen
Hier funktioniert für mich Code:
slide_in_right.xml
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="50%p" android:toXDelta="0"
android:duration="@android:integer/config_mediumAnimTime"/>
<alpha android:fromAlpha="0.0" android:toAlpha="1.0"
android:duration="@android:integer/config_mediumAnimTime" />
</set>
slide_out_left.xml
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromXDelta="0" android:toXDelta="-50%p"
android:duration="@android:integer/config_mediumAnimTime"/>
<alpha android:fromAlpha="1.0" android:toAlpha="0.0"
android:duration="@android:integer/config_mediumAnimTime" />
</set>
Transaktions-Code:
inline fun FragmentActivity.setContentFragment(
containerViewId: Int,
backStack: Boolean = false,
isAnimate: Boolean = false,
f: () -> Fragment
): Fragment? {
val manager = supportFragmentManager
return f().apply {
manager.beginTransaction().let {
if (isAnimate)
it.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left)
if (backStack) {
it.replace(containerViewId, this, "Fr").addToBackStack("Fr").commit()
} else {
it.replace(containerViewId, this, "Fr").commit()
}
}
}
}

Shakawat Hossain
Ich löse das wie folgt
Animation anim = AnimationUtils.loadAnimation(this, R.anim.slide);
fg.startAnimation(anim);
this.fg.setVisibility(View.VISIBLE); //fg is a View object indicate fragment
9171300cookie-checkAndroid-Fragmente und -Animationyes