Mit kell tenni a képernyők közötti átmeneti animációhoz?
sobes.tech MI
Válasz az MI-től
Az Androidban az átmeneti animációk több megközelítéssel valósíthatók meg:
-
Aktivitás animációk (Activity Animations): Témákban vagy programozottan határozhatók meg. Lehetővé teszik az alapértelmezett belépési és kilépési animációk beállítását az aktivitásokhoz.
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) }Animációs fájlok (pl.
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> -
Fragment animációk (Fragment Animations): A tranzakció során határozhatók meg.
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() -
Közös elemek animációi (Shared Element Transitions): Lehetővé teszik egy vagy több View átmenetének animálását a képernyők között, folyamatos hatást keltve. Transition támogatás engedélyezése szükséges a témában.
Az eredeti aktivitásban:
val options = ActivityOptionsCompat.makeSceneTransitionAnimation( this, sharedView, // Az animálandó View ViewCompat.getTransitionName(sharedView) // Név a kötéshez ) startActivity(intent, options.toBundle())A fogadó aktivitásban:
// Az onCreate vagy onViewCreated metódusban (fragment esetén) supportPostponeEnterTransition() // A belépő animáció késleltetése, amíg a View-k készen nem lesznek // Ezután, amikor a View-k készen vannak (pl. kép betöltése után): supportStartPostponedEnterTransition()Az XML elrendezés mindkét képernyőn:
<ImageView android:id="@+id/imageView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:transitionName="image_transition" /> <!-- Név a kötéshez --> -
Component Animations (Navigation Component): Ha a Navigation Component-et használják, az átmeneti animációkat közvetlenül a navigációs gráfban lehet megadni.
<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 módszer kiválasztása az alkalmazott architektúrától (Activity, Fragments, Navigation Component) és a kívánt hatástól függ.