Aktivitätsübergänge in Material Design-Apps bieten visuelle Verbindungen zwischen verschiedene Stadien durch Bewegung und Transformationen zwischen gemeinsamen Elementen. Sie können benutzerdefinierte Animationen für Ein- und Ausstiegsübergänge und für Übergänge gemeinsam genutzter Elemente zwischen Aktivitäten.
Abbildung 1: A mit gemeinsam genutzten Elementen.
- Durch die Eingabetaste wird festgelegt, wie Aufrufe in einer Aktivität
kommt in die Szene. Geben Sie z. B. in
explode
einen Übergang ein, der von außen in die Szene hinein und fliegen nach innen zur Mitte Bildschirm. - Durch einen Exit-Übergang wird festgelegt, wie Aufrufe in einem Aktivitäts-Exit festgelegt werden.
in der Szene. Beim Exit-Übergang
explode
sind beispielsweise die Ansichten die Szene aus der Mitte zu verlassen. - Durch den Übergang von gemeinsam genutzten Elementen wird festgelegt, wie Datenansichten
die zwischen zwei Aktivitäten aufgeteilt werden. Beispiel:
Wenn zwei Aktivitäten dasselbe Bild an verschiedenen Positionen und Größen haben,
changeImageTransform
Shared Element-Übergang übersetzt und das Bild zwischen diesen Aktivitäten reibungslos skalieren kann.
Android unterstützt folgende Übergänge beim Betreten und Beenden:
explode
: Verschiebt die Ansichten von der Mitte der Szene aus in Richtung oder aus der Mitteslide
: verschiebt die Ansicht von einem der Ränder des Kartenelements nach innen oder außen Szene.fade
: Durch Ändern der Aufnahme eine Ansicht zur Szene hinzufügen oder daraus entfernen Deckkraft.
Jeder Übergang, der die Visibility
-Klasse erweitert, wird als Ein- oder Ausstiegsübergang unterstützt.
Weitere Informationen finden Sie in der API-Referenz für die
Transition
.
Android unterstützt auch die folgenden Übergänge mit gemeinsam genutzten Elementen:
changeBounds
: animiert die Änderungen an den Layoutgrenzen des Ziels Aufrufe.changeClipBounds
: animiert die Änderungen der Clipgrenzen des Ziels Aufrufe.changeTransform
: animiert die Skalierungs- und Rotationsänderungen von ZielaufrufechangeImageTransform
: animiert die Änderungen in Größe und Skalierung von Zielbilder.
Wenn Sie in Ihrer App Aktivitätsübergänge aktivieren, zwischen den eintretenden und den schließenden Aktivitäten aktiviert.
Abbildung 2: Ein Szenenübergang mit einem gemeinsamen Element.
Beispielcode, der zwischen Aktivitäten mithilfe gemeinsam genutzter Elemente animiert wird, finden Sie unter ActivitySceneTransitionBasic von
Systemversion prüfen
APIs zur Aktivitätsumstellung sind ab Android 5.0 (API 21) verfügbar. Um die Kompatibilität mit früheren Android-Versionen zu wahren, prüfen Sie die
version
zur Laufzeit, bevor Sie
Rufen Sie die APIs für die folgenden Funktionen auf:
Kotlin
// Check if we're running on Android 5.0 or higher if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { // Apply activity transition } else { // Swap without transition }
Java
// Check if we're running on Android 5.0 or higher if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { // Apply activity transition } else { // Swap without transition }
Benutzerdefinierte Übergänge festlegen
Aktivieren Sie zuerst die Übergänge des Fensterinhalts mit der android:windowActivityTransitions
wenn Sie einen Stil definieren, der vom Material Design übernommen wird. Sie können auch angeben,
Übergänge zwischen Eingabe, Beenden und gemeinsam genutztem Element in Ihrer Stildefinition:
<style name="BaseAppTheme" parent="android:Theme.Material"> <!-- enable window content transitions --> <item name="android:windowActivityTransitions">true</item> <!-- specify enter and exit transitions --> <item name="android:windowEnterTransition">@transition/explode</item> <item name="android:windowExitTransition">@transition/explode</item> <!-- specify shared element transitions --> <item name="android:windowSharedElementEnterTransition"> @transition/change_image_transform</item> <item name="android:windowSharedElementExitTransition"> @transition/change_image_transform</item> </style>
Der Übergang change_image_transform
ist in diesem Beispiel so definiert:
<!-- res/transition/change_image_transform.xml --> <!-- (see also Shared Transitions below) --> <transitionSet xmlns:android="http://schemas.android.com/apk/res/android"> <changeImageTransform/> </transitionSet>
Das changeImageTransform
-Element entspricht dem
Klasse ChangeImageTransform
. Weitere Informationen finden Sie in der API.
Referenz zu Transition
.
Um stattdessen Fensterinhaltsübergänge in Ihrem Code zu aktivieren, rufen Sie die Methode
Window.requestFeature()
-Funktion:
Kotlin
// Inside your activity (if you did not enable transitions in your theme) with(window) { requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS) // Set an exit transition exitTransition = Explode() }
Java
// Inside your activity (if you did not enable transitions in your theme) getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS); // Set an exit transition getWindow().setExitTransition(new Explode());
Um Übergänge in Ihrem Code anzugeben, rufen Sie diese Funktionen mit einem
Objekt Transition
:
Window.setEnterTransition()
Window.setExitTransition()
Window.setSharedElementEnterTransition()
Window.setSharedElementExitTransition()
Die setExitTransition()
und
setSharedElementExitTransition()
-Funktionen definieren den Exit
für die Anrufaktivität. Die setEnterTransition()
und
setSharedElementEnterTransition()
-Funktionen definieren die Eingabe
für die aufgerufene Aktivität.
Um den vollen Effekt eines Übergangs zu erzielen, müssen Sie Fensterinhalte aktivieren sowohl bei den aufrufenden als auch bei den aufgerufenen Aktivitäten. Andernfalls wird der Aufruf wird der Exit-Übergang gestartet, aber dann wird das Fenster wie Skalieren oder Ausblenden.
Um einen Übergang so schnell wie möglich zu starten, verwenden Sie die
Window.setAllowEnterTransitionOverlap()
für die aufgerufene Aktivität. Dadurch sind die Einstiegsübergänge dramatischer.
Aktivität mit Übergängen starten
Wenn Sie Übergänge aktivieren und einen Exit-Übergang für eine Aktivität festlegen, wird aktiviert, wenn Sie eine andere Aktivität starten:
Kotlin
startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this).toBundle())
Java
startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this).toBundle());
Wenn Sie für die zweite Aktivität einen Eingabetastenübergang festlegen,
wird aktiviert, wenn die Aktivität beginnt. So deaktivieren Sie Übergänge beim Start:
weitere Aktivität ein null
-Optionspaket.
Aktivität mit einem geteilten Element starten
Um eine Bildschirmübergangsanimation zwischen zwei Aktivitäten zu erstellen, die gemeinsam genutztes Element:
- Aktivieren Sie Übergänge für Fensterinhalt in Ihrem Design.
- Legen Sie in Ihrem Stil einen Übergang für gemeinsam genutzte Elemente fest.
- Definieren Sie den Übergang als XML-Ressource.
- Weisen Sie den gemeinsam genutzten Elementen in beiden Layouts mit der Funktion
Attribut „
android:transitionName
“. - Verwenden Sie die Funktion
ActivityOptions.makeSceneTransitionAnimation()
.
Kotlin
// Get the element that receives the click event val imgContainerView = findViewById<View>(R.id.img_container) // Get the common element for the transition in this activity val androidRobotView = findViewById<View>(R.id.image_small) // Define a click listener imgContainerView.setOnClickListener( { val intent = Intent(this, Activity2::class.java) // Create the transition animation - the images in the layouts // of both activities are defined with android:transitionName="robot" val options = ActivityOptions .makeSceneTransitionAnimation(this, androidRobotView, "robot") // Start the new activity startActivity(intent, options.toBundle()) })
Java
// Get the element that receives the click event final View imgContainerView = findViewById(R.id.img_container); // Get the common element for the transition in this activity final View androidRobotView = findViewById(R.id.image_small); // Define a click listener imgContainerView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(this, Activity2.class); // Create the transition animation - the images in the layouts // of both activities are defined with android:transitionName="robot" ActivityOptions options = ActivityOptions .makeSceneTransitionAnimation(this, androidRobotView, "robot"); // Start the new activity startActivity(intent, options.toBundle()); } });
Verwenden Sie für freigegebene dynamische Ansichten, die Sie in Ihrem Code generieren, die Methode
View.setTransitionName()
-Funktion, um einen gemeinsamen Elementnamen in beiden
Aktivitäten.
Um die Animation für den Szenenübergang nach Abschluss der zweiten Aktivität rückgängig zu machen, rufen Sie die Methode
Activity.finishAfterTransition()
anstelle von Activity.finish()
.
Eine Aktivität mit mehreren geteilten Elementen starten
Um eine Animation für einen Szenenübergang zwischen zwei Aktivitäten zu erstellen, die mehr
gemeinsam genutzten Element verwenden, definieren Sie die gemeinsam genutzten Elemente in beiden Layouts mit der Funktion
android:transitionName
-Attribut – oder verwenden Sie das
View.setTransitionName()
-Funktion in beiden Aktivitäten – und
erstelle ein
ActivityOptions
wie folgt:
Kotlin
// Rename the Pair class from the Android framework to avoid a name clash import android.util.Pair as UtilPair ... val options = ActivityOptions.makeSceneTransitionAnimation(this, UtilPair.create(view1, "agreedName1"), UtilPair.create(view2, "agreedName2"))
Java
ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(this, Pair.create(view1, "agreedName1"), Pair.create(view2, "agreedName2"));