O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Animar transições entre destinos

O componente de navegação permite adicionar animações de propriedade e visualização a ações. Para criar suas animações, confira Recursos de animação.

A navegação também inclui várias animações padrão para você começar. Para adicionar animações a uma ação, faça o seguinte:

  1. No Navigation Editor, clique na ação em que a animação precisa ocorrer.
  2. Na seção Animations do painel Attributes, clique na seta suspensa ao lado da animação que você quer adicionar. Você pode escolher entre os seguintes tipos:
    • Entrando em um destino
    • Saindo de um destino
    • Entrando em um destino por meio de uma ação de destaque
    • Saindo de um destino por meio de uma ação de destaque
  3. Escolha uma animação na lista de animações do projeto exibida.

Depois de adicionar animações, clique na guia Text para alternar para a visualização de texto XML. O XML das animações agora aparece no elemento <action> correspondente. No exemplo a seguir, specifyAmountFragment é o destino de origem da ação 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>
    

Adicionar transições de elementos compartilhados entre destinos

Além das animações de transição, a navegação permite adicionar transições de elementos compartilhados entre os destinos. As transições de elementos compartilhados são fornecidas de maneira programática e não por meio do arquivo XML de navegação porque elas exigem referência às instâncias de View que você quer incluir na transição de elementos compartilhados.

Cada tipo de destino implementa essa API programática por meio de uma subclasse da interface Navigator.Extras. Os Extras são transmitidos para uma chamada navigate().

Transições de elementos compartilhados de destino do fragmento

A classe FragmentNavigator.Extras permite anexar elementos compartilhados a chamadas de navigate() para destinos de fragmento, como mostrado no exemplo abaixo:

Kotlin

    val extras = FragmentNavigatorExtras(
        imageView to "header_image",
        titleView to "header_title")
    view.findNavController().navigate(R.id.confirmationAction,
        null, // Bundle of args
        null, // NavOptions
        extras)
    

Java

    FragmentNavigator.Extras extras = new FragmentNavigator.Extras.Builder()
        .addSharedElement(imageView, "header_image")
        .addSharedElement(titleView, "header_title")
        .build();
    Navigation.findNavController(view).navigate(R.id.details,
        null, // Bundle of args
        null, // NavOptions
        extras);
    

Transições de elementos compartilhados de destino da atividade

As atividades dependem de ActivityOptionsCompat para controlar transições de elementos compartilhados, conforme detalhado na documentação Iniciar uma atividade com um elemento compartilhado e como mostrado no exemplo abaixo.

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(imageView, "header_image"),
            UtilPair.create(titleView, "header_title"))
    val extras = ActivityNavigator.Extras(options)
    view.findNavController().navigate(R.id.details,
        null, // Bundle of args
        null, // NavOptions
        extras)
    

Java

    ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(this,
            Pair.create(imageView, "header_image"),
            Pair.create(titleView, "header_title"));

    ActivityNavigator.Extras extras = new ActivityNavigator.Extras.Builder()
        .setActivityOptions(options)
        .build();
    Navigation.findNavController(view).navigate(R.id.details,
        null, // Bundle of args
        null, // NavOptions
        extras);
    

Aplicar animações de destaque a transições de atividades

Quando você navega para ou a partir de umaActivity, as animações de destaque não são aplicadas automaticamente. Em vez disso, você precisa chamar ActivityNavigator.applyPopAnimationsToPendingTransition() no destino Activity desejado onde a animação tem que ocorrer:

Kotlin

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

Java

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