Sobes.tech
Middle

¿Qué se necesita hacer para la animación de transición entre pantallas?

sobes.tech AI

Respuesta de la IA

Para la animación de transición entre pantallas en Android, se pueden utilizar varios enfoques:

  1. Animaciones de actividad (Activity Animations): Se definen en temas o programáticamente. Permiten establecer animaciones de entrada y salida predeterminadas para las actividades.

    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)
    }
    

    Archivos de animación (por ejemplo, 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>
    
  2. Animaciones de fragmentos (Fragment Animations): Se definen al realizar una transacción 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()
    
  3. Animaciones de elementos compartidos (Shared Element Transitions): Permiten animar la transición de uno o varios Views entre pantallas, creando un efecto de continuidad. Requieren habilitar soporte de transición en el tema.

    En la actividad de origen:

    val options = ActivityOptionsCompat.makeSceneTransitionAnimation(
        this,
        sharedView, // View para la animación
        ViewCompat.getTransitionName(sharedView) // Nombre para enlazar
    )
    startActivity(intent, options.toBundle())
    

    En la actividad receptora:

    // En el método onCreate o onViewCreated (para fragmentos)
    supportPostponeEnterTransition() // Posponer la animación de entrada hasta que las Views estén listas
    // Luego, cuando las Views estén listas (por ejemplo, en un listener de carga de imagen):
    supportStartPostponedEnterTransition()
    

    En el diseño XML de ambas pantallas:

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:transitionName="image_transition" /> <!-- Nombre para enlazar -->
    
  4. Animaciones de componentes (Navigation Component): Si se usa Navigation Component, las animaciones de transición se pueden definir directamente en el gráfico de navegación.

    <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" />
    

La elección del método depende de la arquitectura utilizada (Activity, Fragments, Navigation Component) y del efecto deseado.