11package com.eva.recorderapp
22
3- import android.animation.AnimatorSet
4- import android.animation.ObjectAnimator
53import android.content.Intent
4+ import android.os.Build
65import android.os.Bundle
7- import android.view.View
8- import android.view.animation.AccelerateDecelerateInterpolator
9- import android.view.animation.AccelerateInterpolator
10- import android.view.animation.DecelerateInterpolator
6+ import android.view.Window
117import androidx.activity.ComponentActivity
128import androidx.activity.compose.setContent
139import androidx.activity.enableEdgeToEdge
1410import androidx.compose.material3.MaterialTheme
1511import androidx.compose.material3.Surface
16- import androidx.core.animation.doOnEnd
17- import androidx.core.animation.doOnStart
18- import androidx.core.splashscreen.SplashScreen
1912import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
2013import androidx.navigation.NavHostController
2114import com.eva.recorderapp.navigation.AppNavHost
15+ import com.eva.ui.R
2216import com.eva.ui.theme.RecorderAppTheme
2317import dagger.hilt.android.AndroidEntryPoint
2418
@@ -28,16 +22,15 @@ class MainActivity : ComponentActivity() {
2822 private var navController: NavHostController ? = null
2923
3024 override fun onCreate (savedInstanceState : Bundle ? ) {
31-
32- val splash = installSplashScreen()
25+ // splash needs to be initiated here
26+ installSplashScreen()
3327
3428 super .onCreate(savedInstanceState)
3529
3630 // set enable edge to edge normally
3731 enableEdgeToEdge()
38- // on splash complete again enable edge to edge
39- splash.animateOnExit(onAnimationEnd = { enableEdgeToEdge() })
40-
32+ // set activity transitions
33+ setTransitions()
4134
4235 setContent {
4336 RecorderAppTheme {
@@ -56,74 +49,23 @@ class MainActivity : ComponentActivity() {
5649 super .onNewIntent(intent)
5750 navController?.handleDeepLink(intent)
5851 }
59- }
60-
61- private fun SplashScreen.animateOnExit (
62- onAnimationStart : () -> Unit = {},
63- onAnimationEnd : () -> Unit = {}
64- ) {
65- val screenViewDuration = 200L
66-
67- setOnExitAnimationListener { screenView ->
68- // do all the animation is a reverse way
69- val interpolator = AccelerateDecelerateInterpolator ()
70-
71- val iconScaleXAnimation = ObjectAnimator
72- .ofFloat(screenView.iconView, View .SCALE_X , 1f , 0.5f )
73- .apply {
74- this .interpolator = interpolator
75- this .duration = screenView.iconAnimationDurationMillis
76- }
77-
78- val iconScaleYAnimation = ObjectAnimator
79- .ofFloat(screenView.iconView, View .SCALE_Y , 1f , 0.5f )
80- .apply {
81- this .interpolator = interpolator
82- this .duration = screenView.iconAnimationDurationMillis
83- }
84-
85- val iconTranslateYAnimation = ObjectAnimator
86- .ofFloat(screenView.iconView, View .TRANSLATION_Y , 0.0f , 20.0f )
87- .apply {
88- this .interpolator = interpolator
89- this .duration = screenView.iconAnimationDurationMillis
90- }
9152
92- val viewFadeAnimation = ObjectAnimator
93- .ofFloat(screenView.view, View .ALPHA , 1.0f , .2f )
94- .apply {
95- this .interpolator = DecelerateInterpolator ()
96- this .duration = screenViewDuration
97- }
98-
99- val viewTranslateAnimation = ObjectAnimator .ofFloat(
100- screenView.view,
101- View .TRANSLATION_Y ,
102- 0f ,
103- screenView.view.height.toFloat()
104- ).apply {
105- this .interpolator = AccelerateInterpolator ()
106- this .duration = screenViewDuration
107- }
108-
109- val viewAnimatorSet = AnimatorSet ().apply {
110- playTogether(viewFadeAnimation, viewTranslateAnimation)
111- doOnEnd {
112- screenView.remove()
113- onAnimationEnd()
114- }
115- }
116-
117- val iconAnimatorSet = AnimatorSet ().apply {
118- playTogether(
119- iconScaleXAnimation,
120- iconScaleYAnimation,
121- iconTranslateYAnimation
53+ @Suppress(" DEPRECATION" )
54+ private fun setTransitions () {
55+ // allow activity transitions
56+ window.requestFeature(Window .FEATURE_ACTIVITY_TRANSITIONS )
57+ // set transitions
58+ if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .UPSIDE_DOWN_CAKE ) {
59+ overrideActivityTransition(
60+ OVERRIDE_TRANSITION_OPEN ,
61+ R .anim.activity_enter_transition,
62+ R .anim.activity_exit_transition
63+ )
64+ } else {
65+ overridePendingTransition(
66+ R .anim.activity_enter_transition,
67+ R .anim.activity_exit_transition
12268 )
123- doOnEnd { viewAnimatorSet.start() }
124- doOnStart { onAnimationStart() }
125-
12669 }
127- iconAnimatorSet.start()
12870 }
12971}
0 commit comments