A volta preditiva, um recurso de navegação por gestos, permite que os usuários tenham uma prévia de onde o deslize para voltar os leva. A volta preditiva é integrada perfeitamente ao Compose para melhorar a experiência de navegação do app. Os usuários têm transições mais suaves e intuitivas ao voltar para o app. A Figura 1 mostra como isso funciona no app de exemplo SociaLite.
Neste guia, descrevemos como fazer o seguinte com a volta preditiva:
- Ativar o gesto de volta preditivo
- Ativar animações padrão do sistema
- Ativar a volta preditiva com a Navigation Compose
- Integrar com transições de elementos compartilhados
- Suporte à volta preditiva com componentes do Material Compose
- Acessar o progresso manualmente com
PredictiveBackHandler
- Testar a animação do gesto de volta preditivo
Ativar o gesto de volta preditivo
Para ativar as animações de volta preditiva, você precisa ativar o gesto de volta
preditivo. Para ativar, adicione android:enableOnBackInvokedCallback="true
à
tag <application>
ou às tags <activity>
individuais
no arquivo AndroidManifest.xml
.
Ativar animações padrão do sistema
As animações de volta à tela inicial, entre atividades e tarefas estão disponíveis no Android 15 e em versões mais recentes para apps que migraram para as APIs de processamento de volta com suporte.
- Voltar para a tela inicial: retorna o usuário para a tela inicial.
- Entre atividades: transições entre atividades no app.
- Entre tarefas: transições entre tarefas.
Essas animações são ativadas por padrão no Android 15 e versões mais recentes. Em dispositivos com o Android 13 ou 14, os usuários podem ativar essas opções nas Opções do desenvolvedor.
Para receber as animações do sistema, atualize a dependência Activity
do AndroidX
para 1.6.0 ou mais recente.
Ativar a volta preditiva com o Navigation Compose
Para usar a volta preditiva no Navigation Compose, verifique se você está usando a
biblioteca navigation-compose
2.8.0
ou mais recente.
O Compose de navegação faz transições entre telas automaticamente quando o usuário desliza para voltar:
Ao navegar, é possível criar transições personalizadas com
popEnterTransition
e popExitTransition
. Quando aplicados ao
NavHost
, esses modificadores permitem definir como as telas de entrada e saída
são animadas. Eles podem ser usados para criar vários efeitos, como dimensionamento,
desvanecimento ou deslizamento.
Neste exemplo, scaleOut
é usado em popExitTransition
para reduzir
a tela de saída quando o usuário navega de volta. Além disso, o
parâmetro transformOrigin
determina o ponto em torno do qual a animação
de escalonamento ocorre. Por padrão, é o centro da tela (0.5f, 0.5f
).
É possível ajustar esse valor para que a escalação se origine de um ponto diferente.
NavHost( navController = navController, startDestination = Home, popExitTransition = { scaleOut( targetScale = 0.9f, transformOrigin = TransformOrigin(pivotFractionX = 0.5f, pivotFractionY = 0.5f) ) }, popEnterTransition = { EnterTransition.None }, modifier = modifier, )
Esse código produz o seguinte resultado:
popEnterTransition
e popExitTransition
controlam especificamente animações
ao abrir a backstack, com um gesto de volta, por exemplo. Também é possível usar enterTransition
e exitTransition
para definir animações para entrar e
sair de elementos combináveis em geral, não apenas para a volta preditiva. Se você definir apenas enterTransition
e exitTransition
, eles serão usados para a navegação
normal e para abrir a backstack. No entanto, o uso de popEnterTransition
e popExitTransition
permite criar animações distintas para a navegação de volta.
Integrar com transições de elementos compartilhados
As transições de elementos compartilhados fornecem uma conexão visual suave entre combináveis com conteúdo compartilhado, geralmente usados para navegação.
Para usar elementos compartilhados com o Navigation Compose, consulte Volta preditiva com elementos compartilhados.
Suporte à volta preditiva com componentes do Material Compose
Muitos componentes na biblioteca do Material Compose foram projetados para funcionar perfeitamente
com gestos de volta preditiva. Para ativar animações de volta preditiva nesses
componentes, inclua a dependência mais recente do Material3 (androidx.compose.material3:material3-*:1.3.0
ou mais recente) no projeto.
Os componentes do Material que oferecem suporte a animações de volta preditiva incluem:
SearchBar
ModalBottomSheet
ModalDrawerSheet/DismissibleDrawerSheet
ModalNavigationDrawer/DismissibleNavigationDrawer
SearchBar
e ModalBottomSheet
são animados automaticamente com
gestos "Voltar" preditivos. ModalNavigationDrawer
,
ModalDrawerSheet
, DismissibleDrawerSheet
e
DismissibleNavigationDrawer
exigem que você transmita o drawerState
para
os elementos combináveis de conteúdo da respectiva página.
Acessar o progresso manualmente com PredictiveBackHandler
O elemento combinável PredictiveBackHandler
[5] no Jetpack Compose permite
interceptar o gesto de voltar e acessar o progresso dele. É possível reagir ao gesto de
voltar do usuário em tempo real, criando animações ou comportamentos personalizados com base na
distância da gestuação do usuário.
Para usar o PredictiveBackHandler
, verifique se você está usando
androidx.activity:activity:1.6.0
ou mais recente.
PredictiveBackHandler
fornece um Flow<BackEventCompat>
que emite eventos
representando o progresso do gesto de volta. Cada evento contém informações
como:
progress
: um valor flutuante entre 0 e 1, indicando o progresso do gesto de volta (0 = gesto iniciado, 1 = gesto concluído).touchX
etouchY
: as coordenadas X e Y do evento de toque.
O snippet a seguir mostra o uso básico de PredictiveBackHandler
:
PredictiveBackHandler(true) { progress: Flow<BackEventCompat> -> // code for gesture back started try { progress.collect { backEvent -> // code for progress boxScale = 1F - (1F * backEvent.progress) } // code for completion boxScale = 0F } catch (e: CancellationException) { // code for cancellation boxScale = 1F } }
Exemplo: integrar com uma gaveta de navegação
Este exemplo demonstra como implementar uma animação personalizada no app usando PredictiveBackHandler
para criar uma interação suave com uma gaveta de navegação
em resposta a gestos de volta no JetLagged:
Neste exemplo, PredictiveBackHandler
é usado para:
- Acompanhe o progresso do gesto de volta.
- Atualize o
translationX
da gaveta com base no progresso do gesto. - Use um
velocityTracker
para abrir ou fechar a gaveta com base na velocidade do gesto quando ele for concluído ou cancelado.
Testar a animação do gesto de volta preditivo
Se você ainda usa o Android 13 ou o Android 14, teste a animação de volta para a tela inicial.
Para testar a animação, siga estas etapas:
- No dispositivo, acesse Configurações > Sistema > Opções do desenvolvedor.
- Selecione Animações de gestos "Voltar" preditivos.
- Inicie o app atualizado e use o gesto "Voltar" para testar o recurso.
No Android 15 e mais recentes, esse recurso é ativado por padrão.