Какво трябва да се направи за анимацията на прехода между екрани?
sobes.tech AI
Отговор от AI
За анимации на преход между екрани в Android можете да използвате няколко подхода:
-
Анимации на активностите (Activity Animations): Определят се в теми или програмно. Позволяват да зададете стандартни анимации за вход и изход за активностите.
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) }Файлове за анимации (например
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 Animations): Определят се при извършване на транзакция с фрагмент.
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() -
Анимации на споделени елементи (Shared Element Transitions): Позволяват анимиране на прехода на един или няколко View между екрани, създавайки ефект на непрекъснатост. Изисква се включване на поддръжка на transition в темата.
В изходната активност:
val options = ActivityOptionsCompat.makeSceneTransitionAnimation( this, sharedView, // View за анимация ViewCompat.getTransitionName(sharedView) // Име за свързване ) startActivity(intent, options.toBundle())В приемащата активност:
// В метода onCreate или onViewCreated (за фрагмент) supportPostponeEnterTransition() // Отложи анимацията на входа, докато View-овете не са готови // След това, когато View-овете са готови (например, при зареждане на изображение): supportStartPostponedEnterTransition()В XML разметката на двата екрана:
<ImageView android:id="@+id/imageView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:transitionName="image_transition" /> <!-- Име за свързване --> -
Component Animations (Navigation Component): Ако се използва Navigation Component, анимациите за преход могат да се зададат директно в графа за навигация.
<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" />
Изборът на метод зависи от използваната архитектура (Activity, Fragments, Navigation Component) и желаното ефект.