Aktivität mit einer Animation starten

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 Mitte
  • slide: 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 Zielaufrufe
  • changeImageTransform: 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:

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:

  1. Aktivieren Sie Übergänge für Fensterinhalt in Ihrem Design.
  2. Legen Sie in Ihrem Stil einen Übergang für gemeinsam genutzte Elemente fest.
  3. Definieren Sie den Übergang als XML-Ressource.
  4. Weisen Sie den gemeinsam genutzten Elementen in beiden Layouts mit der Funktion Attribut „android:transitionName“.
  5. 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"));