Sobes.tech
Middle

Cosa bisogna fare per l'animazione di transizione tra le schermate?

sobes.tech AI

Risposta dell'AI

Per l'animazione di transizione tra schermate in Android, è possibile utilizzare diversi approcci:

  1. Animazioni delle attività (Activity Animations): Definite nei temi o programmaticamente. Permettono di impostare animazioni di ingresso e uscita predefinite per le attività.

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

    File di animazione (ad esempio, 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. Animazioni dei frammenti (Fragment Animations): Definite durante la transazione del frammento.

    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. Transizioni di elementi condivisi (Shared Element Transitions): Permettono di animare il passaggio di uno o più View tra schermate, creando un effetto di continuità. Richiedono di abilitare il supporto delle transizioni nel tema.

    Nella attività di origine:

    val options = ActivityOptionsCompat.makeSceneTransitionAnimation(
        this,
        sharedView, // View per l'animazione
        ViewCompat.getTransitionName(sharedView) // Nome per il collegamento
    )
    startActivity(intent, options.toBundle())
    

    Nella attività di destinazione:

    // Nel metodo onCreate o onViewCreated (per i frammenti)
    supportPostponeEnterTransition() // Ritarda l'animazione di ingresso finché le Views non sono pronte
    // Quindi, quando le Views sono pronte (ad esempio, nel listener di caricamento immagine):
    supportStartPostponedEnterTransition()
    

    Nel layout XML di entrambe le schermate:

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:transitionName="image_transition" /> <!-- Nome per il collegamento -->
    
  4. Animazioni dei componenti (Navigation Component): Se si utilizza il Navigation Component, le animazioni di transizione possono essere definite direttamente nel grafico di navigazione:

    <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 scelta del metodo dipende dall'architettura utilizzata (Activity, Fragments, Navigation Component) e dall'effetto desiderato.