Animuj przejścia między miejscami docelowymi

Komponent Nawigacja umożliwia dodawanie zarówno właściwości, jak i animacji widoku do . Aby utworzyć własne animacje, zapoznaj się z Zasoby animacji.

Na początek nawigacja zawiera też kilka domyślnych animacji. Aby dodać animacje do akcji, wykonaj te czynności:

  1. W edytorze nawigacji kliknij działanie, w przypadku którego powinna pojawić się animacja. wystąpienia.
  2. W sekcji Animacje w panelu Atrybuty kliknij menu. strzałkę obok animacji, którą chcesz dodać. Możesz wybrać jedną z tych opcji: następujące typy:
    • Podawanie miejsca docelowego
    • Opuszczanie miejsca docelowego
    • Wprowadzanie miejsca docelowego przez pop action, działanie który podczas nawigacji powoduje wyodrębnianie dodatkowych miejsc docelowych poza stos tylny.
    • Opuszczanie miejsca docelowego przez kliknięcie wyskakującego okienka
  3. Wybierz animację z wyświetlonej listy animacji projektu.
.
w sekcji animacji w panelu atrybutów
Rysunek 1. Sekcja Animacje komponentu Atrybuty.

Po dodaniu animacji kliknij kartę Tekst, aby przełączyć się na tryb XML. widok. Kod XML animacji pojawi się w odpowiednim <action> element. W tym przykładzie specifyAmountFragment jest źródłowe miejsce docelowe dla działania confirmationAction:

<fragment
    android:id="@+id/specifyAmountFragment"
    android:name="com.example.buybuddy.buybuddy.SpecifyAmountFragment"
    android:label="fragment_specify_amount"
    tools:layout="@layout/fragment_specify_amount">
    <action
        android:id="@+id/confirmationAction"
        app:destination="@id/confirmationFragment"
        app:enterAnim="@anim/slide_in_right"
        app:exitAnim="@anim/slide_out_left"
        app:popEnterAnim="@anim/slide_in_left"
        app:popExitAnim="@anim/slide_out_right" />
</fragment>

Dodaj wspólne przejścia elementów między miejscami docelowymi

Jeśli widok jest udostępniany między 2 miejscami docelowymi, możesz użyć przejścia ze współużytkowanego elementu, by określić, jak ma się wyświetlać widok, gdy nawigowanie z jednego miejsca docelowego do drugiego. Przejścia elementów wspólnych stanowią część ram przejścia.

Elementy udostępnione są dostarczane automatycznie, a nie przez plik XML nawigacji. Miejsca docelowe aktywności i fragmentów mają podklasę z Navigator.Extras z dodatkowymi opcjami nawigacji, w tym z udostępnionymi . Możesz przekazać te Extras podczas połączenia navigate()

Udostępniony element przechodzi do miejsca docelowego fragmentu

FragmentNavigator.Extras pozwala mapować udostępnione elementy z jednego miejsca docelowego na drugie według nazwy przejścia, podobnie jak w przypadku użycia FragmentTransaction.addSharedElement() Następnie możesz przekazać dodatki do navigate() w sposób pokazany poniżej przykład:

Kotlin

val extras = FragmentNavigatorExtras(view1 to "hero_image")

view.findNavController().navigate(
    R.id.confirmationAction,
    null, // Bundle of args
    null, // NavOptions
    extras)

Java

FragmentNavigator.Extras extras = new FragmentNavigator.Extras.Builder()
    .addSharedElement(view1, "hero_image")
    .build();

Navigation.findNavController(view).navigate(
    R.id.details,
    null, // Bundle of args
    null, // NavOptions
    extras);

Udostępniony element przechodzi do miejsca docelowego aktywności

Działania wymagają ActivityOptionsCompat do kontrolowania przejścia z elementów udostępnionych. Więcej informacji na ten temat znajdziesz w dokumentacji Rozpoczynanie aktywności przy użyciu udostępnionego elementu oraz w tym przykładzie:

Kotlin

// Rename the Pair class from the Android framework to avoid a name clash
import android.util.Pair as UtilPair
...
val options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity,
        UtilPair.create(view1, "hero_image"))
val extras = ActivityNavigatorExtras(options)
view.findNavController().navigate(
    R.id.details,
    null, // Bundle of args
    null, // NavOptions
    extras)

Java

ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(this,
        Pair.create(view1, "hero_image"));

ActivityNavigatorExtras extras = new ActivityNavigatorExtras.Builder()
    .setActivityOptions(options)
    .build();


Navigation.findNavController(view).navigate(
    R.id.details,
    null, // Bundle of args
    null, // NavOptions
    extras);

Zastosuj animacje pop do przejść aktywności

Gdy przechodzisz do lub z elementu Activity, animacje wyostrzenia nie są stosowane automatycznie. Zamiast tego musisz wywołać ActivityNavigator.applyPopAnimationsToPendingTransition() z docelowego miejsca docelowego Activity, gdzie ma nastąpić animacja:

Kotlin

override fun finish() {
    super.finish()
    ActivityNavigator.applyPopAnimationsToPendingTransition(this)
}

Java

@Override
public void finish() {
    super.finish();
    ActivityNavigator.applyPopAnimationsToPendingTransition(this);
}