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:
-
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> -
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() -
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 --> -
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.