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:
Window.setEnterTransition()
Window.setExitTransition()
Window.setSharedElementEnterTransition()
Window.setSharedElementExitTransition()
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:
- Włącz w motywie przejścia zawartości okien.
- Określ przejście elementów udostępnionych w Twoim stylu.
- Zdefiniuj przejście jako zasób XML.
- Wspólna nazwa do udostępnionych elementów w obu układach przypisz za pomocą tagu
android:transitionName
. - 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"));