Sobes.tech
Middle

Ce trebuie făcut pentru animația de tranziție între ecrane?

sobes.tech AI

Răspuns de la AI

Pentru animația de tranziție între ecrane în Android, se pot folosi mai multe abordări:

  1. Animații de activitate (Activity Animations): Definite în teme sau programatic. Permite setarea animațiilor standard de intrare și ieșire pentru activități.

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

    Fișiere de animație (de exemplu, 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. Animații de fragmente (Fragment Animations): Definite la efectuarea unei tranzacții de fragment.

    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. Tranziții de elemente partajate (Shared Element Transitions): Permite animarea tranziției unuia sau mai multor View între ecrane, creând un efect de continuitate. Necesită activarea suportului pentru transition în temă.

    În activitatea sursă:

    val options = ActivityOptionsCompat.makeSceneTransitionAnimation(
        this,
        sharedView, // View pentru animație
        ViewCompat.getTransitionName(sharedView) // Nume pentru legare
    )
    startActivity(intent, options.toBundle())
    

    În activitatea destinatară:

    // În metoda onCreate sau onViewCreated (pentru fragmente)
    supportPostponeEnterTransition() // Amână animația de intrare până când Views sunt gata
    // Apoi, când Views sunt gata (de exemplu, în ascultătorul de încărcare a imaginii):
    supportStartPostponedEnterTransition()
    

    În layout XML al ambelor ecrane:

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:transitionName="image_transition" /> <!-- Nume pentru legare -->
    
  4. Animații de componente (Navigation Component): Dacă se folosește Navigation Component, animațiile de tranziție pot fi definite direct în graficul de navigație:

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

Alegerea metodei depinde de arhitectura utilizată (Activity, Fragments, Navigation Component) și efectul dorit.