Rozpoczynanie aktywności przy użyciu animacji

Przejścia aktywności w aplikacjach w stylu Material Design zapewniają wizualne powiązania między przez ruch i przekształcenia między wspólnymi elementami. Możesz określić własne animacje dla przejść przejścia wspólnych elementów między działaniami.

Rysunek 1. O ze współużytkowanymi elementami.

  • Przejście Enter określa sposób wyświetleń w ramach aktywności wejdź na scenę. Na przykład przy wejściu w trybie explode parametr pojawia się z zewnątrz i przenoszą się do środka, ekranu.
  • Przejście z wyjścia określa sposób wyświetlania danych w ramach wyjścia z aktywności. scenę. Na przykład w przejściu wyjścia explode wyświetlenia oddalona od środka sceny.
  • Przejście z udostępnianymi elementami określa sposób, w jaki wyświetlenia które są wspólne dla obu rodzajów aktywności. Przykład: jeśli 2 aktywności mają ten sam obraz w różnych pozycjach i rozmiarach, Przejście changeImageTransform elementu udostępnionego oznacza tłumaczenie i płynnie skaluje obraz między tymi działaniami.

Android obsługuje następujące przejścia:

  • explode: przenosi widoki w stronę środka sceny lub z niego.
  • slide: przenosi widoki do lub z jednego z krawędzi scena.
  • fade: dodaje widok do sceny lub usuwa go z niego, zmieniając jego przezroczystości.

Każde przejście rozszerzające klasę Visibility jest obsługiwane jako przejście wejścia lub wyjścia. Więcej informacji znajdziesz w dokumentacji interfejsu API w sekcji Transition zajęcia.

Android obsługuje również te wspólne elementy przejścia:

  • changeBounds: animuje zmiany granic układu elementu docelowego wyświetleń.
  • changeClipBounds: animuje zmiany w granicach klipu elementu docelowego wyświetleń.
  • changeTransform: animuje zmiany skali i obrotu docelowych wyświetleń.
  • changeImageTransform: animuje zmiany rozmiaru i skali kierować reklamy na obrazy.

Gdy włączysz w aplikacji przechodzenie aktywności, uaktywnia się przejście między czynnościami rozpoczynania i kończenia aktywności.

Rysunek 2. Przejście sceny z jednym wspólnym elementem.

Przykładowy kod animowany między działaniami przy użyciu udostępnionych elementów znajdziesz tutaj: ActivitySceneprzejśćPodstawowy.

Sprawdzanie wersji systemu

Interfejsy API przenoszenia aktywności są dostępne na Androidzie 5.0 (API 21) i nowszych. Aby zachować zgodność z wcześniejszymi wersjami Androida, zapoznaj się z systemu version w czasie działania przed wywoływać interfejsy API dla dowolnej z tych funkcji:

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
}

Określanie niestandardowych przeniesień

Najpierw włącz przechodzenie treści okien za pomocą interfejsu android:windowActivityTransitions podczas definiowania stylu dziedziczonego z motywu Material Design. Możesz też określić przejścia elementów wprowadzania, wyjścia i udostępniania ich elementów w definicji stylu:

<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>

W tym przykładzie przejście change_image_transform jest zdefiniowane tak:

<!-- res/transition/change_image_transform.xml -->
<!-- (see also Shared Transitions below) -->
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
  <changeImageTransform/>
</transitionSet>

Element changeImageTransform odpowiada ChangeImageTransform zajęcia. Więcej informacji znajdziesz w interfejsie API referencyjnym dla: Transition.

Aby zamiast tego włączyć w kodzie przechodzenie treści okien, wywołaj funkcję Funkcja Window.requestFeature():

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());

Aby określić przejścia w kodzie, wywołaj te funkcje za pomocą funkcji Transition obiekt:

setExitTransition() i setSharedElementExitTransition() funkcje definiują wyjście dla aktywności związanej z połączeniami. setEnterTransition() i Funkcje setSharedElementEnterTransition() definiują klawisz Enter dla tzw. aktywności.

Aby uzyskać pełny efekt przejścia, musisz włączyć treść okna przejścia między wywołaniem, jak i wezwaniem aktywności. W przeciwnym razie wywołanie aktywność rozpoczyna przejście, ale potem wyświetla się okno, przejściami – takich jak skala lub zanikanie.

Aby jak najszybciej rozpocząć przejście do nowej wersji, użyj Window.setAllowEnterTransitionOverlap() dla nazywanej aktywnością. Pozwala to uzyskać bardziej dramatyczne przejście.

Rozpoczynanie aktywności przy użyciu przejść

Jeśli włączysz przejścia i ustawisz je dla danej aktywności, przejście aktywuje się, kiedy uruchomisz inne działanie, w następujący sposób:

Kotlin

startActivity(intent,
              ActivityOptions.makeSceneTransitionAnimation(this).toBundle())

Java

startActivity(intent,
              ActivityOptions.makeSceneTransitionAnimation(this).toBundle());

Jeśli dla drugiego ćwiczenia ustawisz przejście, zostanie ono również ustawione aktywuje się po rozpoczęciu aktywności. Aby wyłączyć przejścia po rozpoczęciu inną aktywność, podaj pakiet opcji null.

Rozpoczynanie aktywności związanej z udostępnionym elementem

Aby utworzyć animację przejścia między dwoma czynnościami, które mają tag udostępnianego elementu, wykonaj te czynności:

  1. Włącz w motywie przejścia zawartości okien.
  2. Określ przejście elementów udostępnionych w Twoim stylu.
  3. Zdefiniuj przejście jako zasób XML.
  4. Wspólna nazwa do udostępnionych elementów w obu układach przypisz za pomocą tagu android:transitionName.
  5. Użyj funkcji 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());
    }
});

W przypadku udostępnianych widoków dynamicznych, które generujesz w kodzie, użyj funkcji View.setTransitionName() do określania wspólnej nazwy elementu w obu tych miejscach. aktywności.

Aby odwrócić animację przejścia między scenami po zakończeniu drugiej czynności, wywołaj funkcję Activity.finishAfterTransition() zamiast Activity.finish().

Rozpoczynanie aktywności z wieloma udostępnianymi elementami

Aby utworzyć animację przejścia między dwoma czynnościami o większej niż jeden udostępniony element, zdefiniuj je w obu układach za pomocą android:transitionName – lub użyj atrybutu View.setTransitionName() w obu działaniach – oraz utwórz ActivityOptions w następujący sposób:

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"));