O que é necessário fazer para a animação de transição entre telas?
sobes.tech IA
Resposta da IA
Para a animação de transição entre telas no Android, podem ser utilizados vários métodos:
-
Animações de Atividade (Activity Animations): Definidas nos temas ou programaticamente. Permitem definir animações padrão de entrada e saída para as atividades.
override fun startActivity(intent: Intent) { super.startActivity(intent) overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left) } override fun finish() { super.finish() overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right) }Ficheiros de animação (por exemplo,
res/anim/slide_in_right.xml):<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="100%" android:toXDelta="0%" android:duration="@android:integer/config_shortAnimTime" /> </set> -
Animações de Fragmentos (Fragment Animations): Definidas ao fazer uma transação de fragmento.
supportFragmentManager.beginTransaction() .setCustomAnimations(R.anim.fade_in, R.anim.fade_out, R.anim.fade_in, R.anim.fade_out) .replace(R.id.container, fragment) .commit() -
Transições de Elementos Partilhados (Shared Element Transitions): Permitem animar a transição de um ou vários Views entre telas, criando um efeito de continuidade. Requerem ativar o suporte de transição no tema.
Na atividade de origem:
val options = ActivityOptionsCompat.makeSceneTransitionAnimation( this, sharedView, // View para animação ViewCompat.getTransitionName(sharedView) // Nome para ligação ) startActivity(intent, options.toBundle())Na atividade receptora:
// No método onCreate ou onViewCreated (para fragmentos) supportPostponeEnterTransition() // Adiar a animação de entrada até que as Views estejam prontas // Depois, quando as Views estiverem prontas (por exemplo, num listener de carregamento de imagem): supportStartPostponedEnterTransition()No layout XML de ambas as telas:
<ImageView android:id="@+id/imageView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:transitionName="image_transition" /> <!-- Nome para ligação --> -
Animações de Componentes (Navigation Component): Se estiver a usar o Navigation Component, as animações de transição podem ser definidas diretamente no gráfico de navegação.
<action android:id="@+id/action_fragmentA_to_fragmentB" app:destination="@id/fragmentB" app:enterAnim="@anim/slide_in_right" app:exitAnim="@anim/slide_out_left" app:popEnterAnim="@anim/slide_in_left" app:popExitAnim="@anim/slide_out_right" />
A escolha do método depende da arquitetura utilizada (Activity, Fragments, Navigation Component) e do efeito desejado.