1
1
package kiwi.orbit.compose.catalog
2
2
3
+ import androidx.compose.animation.EnterTransition
4
+ import androidx.compose.animation.ExitTransition
5
+ import androidx.compose.animation.core.FastOutLinearInEasing
6
+ import androidx.compose.animation.core.LinearOutSlowInEasing
7
+ import androidx.compose.animation.core.tween
8
+ import androidx.compose.animation.fadeIn
9
+ import androidx.compose.animation.fadeOut
10
+ import androidx.compose.animation.slideInHorizontally
11
+ import androidx.compose.animation.slideOutHorizontally
3
12
import androidx.compose.foundation.isSystemInDarkTheme
4
13
import androidx.compose.runtime.Composable
5
14
import androidx.compose.runtime.SideEffect
@@ -8,6 +17,9 @@ import androidx.compose.runtime.mutableStateOf
8
17
import androidx.compose.runtime.saveable.rememberSaveable
9
18
import androidx.compose.runtime.setValue
10
19
import androidx.compose.ui.graphics.Color
20
+ import androidx.compose.ui.platform.LocalDensity
21
+ import androidx.compose.ui.unit.Density
22
+ import androidx.compose.ui.unit.dp
11
23
import androidx.navigation.compose.NavHost
12
24
import androidx.navigation.compose.rememberNavController
13
25
import com.google.accompanist.systemuicontroller.rememberSystemUiController
@@ -86,11 +98,16 @@ fun CatalogApplication() {
86
98
private fun NavGraph (
87
99
onToggleTheme : () -> Unit ,
88
100
) {
101
+ val density = LocalDensity .current
89
102
val navController = rememberNavController()
90
103
91
104
NavHost (
92
105
navController = navController,
93
106
startDestination = createRoutePattern<Destinations .Main >(),
107
+ enterTransition = { SharedXAxisEnterTransition (density) },
108
+ exitTransition = { SharedXAxisExitTransition (density) },
109
+ popEnterTransition = { SharedXAxisPopEnterTransition (density) },
110
+ popExitTransition = { SharedXAxisPopExitTransition (density) },
94
111
) {
95
112
composable<Destinations .Main > { MainScreen (navController::navigate, onToggleTheme) }
96
113
@@ -137,3 +154,31 @@ private fun NavGraph(
137
154
topAppBarNavigation<Destinations .TopAppBar >(navController)
138
155
}
139
156
}
157
+
158
+ private val SharedXAxisEnterTransition : (Density ) -> EnterTransition = { density ->
159
+ fadeIn(animationSpec = tween(durationMillis = 210 , delayMillis = 90 , easing = LinearOutSlowInEasing )) +
160
+ slideInHorizontally(animationSpec = tween(durationMillis = 300 )) {
161
+ with (density) { 30 .dp.roundToPx() }
162
+ }
163
+ }
164
+
165
+ private val SharedXAxisPopEnterTransition : (Density ) -> EnterTransition = { density ->
166
+ fadeIn(animationSpec = tween(durationMillis = 210 , delayMillis = 90 , easing = LinearOutSlowInEasing )) +
167
+ slideInHorizontally(animationSpec = tween(durationMillis = 300 )) {
168
+ with (density) { (- 30 ).dp.roundToPx() }
169
+ }
170
+ }
171
+
172
+ private val SharedXAxisExitTransition : (Density ) -> ExitTransition = { density ->
173
+ fadeOut(animationSpec = tween(durationMillis = 90 , easing = FastOutLinearInEasing )) +
174
+ slideOutHorizontally(animationSpec = tween(durationMillis = 300 )) {
175
+ with (density) { (- 30 ).dp.roundToPx() }
176
+ }
177
+ }
178
+
179
+ private val SharedXAxisPopExitTransition : (Density ) -> ExitTransition = { density ->
180
+ fadeOut(animationSpec = tween(durationMillis = 90 , easing = FastOutLinearInEasing )) +
181
+ slideOutHorizontally(animationSpec = tween(durationMillis = 300 )) {
182
+ with (density) { 30 .dp.roundToPx() }
183
+ }
184
+ }
0 commit comments