Anonymous
Почему модификатор. AnimateEnterExit () работает в одном случае, но не в другом?
Сообщение
Anonymous » 28 янв 2025, 06:34
В JetPack Compose я пытался использовать анимационную визиру с модификатором .AnimateNeTerExit (). Но я не могу понять, что в одном из моих случаев модификатор AnimateNeTerExit () правильно переоценивает анимацию родителя, но во втором. нет. Я не могу точно определить реальную проблему. Я смиренно прошу, пожалуйста, помочь мне решить эту проблему.
Код: Выделить всё
@OptIn(ExperimentalAnimationApi::class)
@Composable
fun CustomAnimatedVisibilityDemo(
modifier: Modifier = Modifier
) {
var visible by remember { mutableStateOf(true) }
Column(
modifier = modifier.fillMaxSize(),
verticalArrangement = Arrangement.spacedBy(16.dp),
horizontalAlignment = Alignment.CenterHorizontally
) {
// Wrap everything inside AnimatedVisibility
AnimatedVisibility(
visible = visible,
enter = fadeIn(animationSpec = tween(1000)) + slideInVertically(initialOffsetY = { -it }),
exit = fadeOut(animationSpec = tween(1000)) + slideOutVertically(targetOffsetY = { it })
) {
Column(
verticalArrangement = Arrangement.spacedBy(16.dp)
) {
// First Box with default parent animation (fadeIn & fadeOut)
Box(
modifier = Modifier
.size(200.dp)
.clip(RoundedCornerShape(8.dp))
.background(Color.Green),
contentAlignment = Alignment.Center
) {
Text(text = "Fade Box")
}
// Second Box with a custom slide animation
Box(
modifier = Modifier
.size(200.dp)
.clip(RoundedCornerShape(8.dp))
.background(Color.Blue)
.animateEnterExit(
enter = expandVertically(animationSpec = tween(1200)) + fadeIn(),
exit = shrinkVertically(animationSpec = tween(800)) + fadeOut()
),
contentAlignment = Alignment.Center
) {
Text(text = "Slide Box")
}
}
}
// Toggle visibility button
Button(onClick = { visible = !visible }) {
Text(text = "Toggle")
}
}
}
< /code>
< /li>
[*] Composable, в котором он не работает: < /p>
@OptIn(ExperimentalAnimationApi::class)
@Composable
fun AnimateAppAndDisApp(
modifier: Modifier = Modifier
) {
var visible by remember { mutableStateOf(false) }
Column(
modifier = Modifier.fillMaxSize(),
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {
Button(onClick = { visible = !visible }) {
Text(if (visible) "Hide" else "Show")
}
Spacer(modifier = Modifier.height(20.dp))
AnimatedVisibility(
visible = visible,
enter = fadeIn(animationSpec = tween(1000)) + slideInVertically(initialOffsetY = { -it }),
exit = fadeOut(animationSpec = tween(1000)) + slideOutVertically(targetOffsetY = { it })
) {
Column(
modifier = Modifier.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally
) {
// Default animation
Text("Default Animation 1")
Spacer(modifier = Modifier.height(10.dp))
// Overridden animation
BasicText(
"Custom Animation",
modifier = Modifier.animateEnterExit(
enter = expandVertically(animationSpec = tween(1200)) + fadeIn(),
exit = shrinkVertically(animationSpec = tween(800)) + fadeOut()
)
)
Spacer(modifier = Modifier.height(10.dp))
// Default animation
Text("Default Animation 2")
}
}
}
}
Подробнее здесь:
https://stackoverflow.com/questions/793 ... t-in-other
1738035263
Anonymous
В JetPack Compose я пытался использовать анимационную визиру с модификатором .AnimateNeTerExit (). Но я не могу понять, что в одном из моих случаев модификатор AnimateNeTerExit () правильно переоценивает анимацию родителя, но во втором. нет. Я не могу точно определить реальную проблему. Я смиренно прошу, пожалуйста, помочь мне решить эту проблему. [code]@OptIn(ExperimentalAnimationApi::class) @Composable fun CustomAnimatedVisibilityDemo( modifier: Modifier = Modifier ) { var visible by remember { mutableStateOf(true) } Column( modifier = modifier.fillMaxSize(), verticalArrangement = Arrangement.spacedBy(16.dp), horizontalAlignment = Alignment.CenterHorizontally ) { // Wrap everything inside AnimatedVisibility AnimatedVisibility( visible = visible, enter = fadeIn(animationSpec = tween(1000)) + slideInVertically(initialOffsetY = { -it }), exit = fadeOut(animationSpec = tween(1000)) + slideOutVertically(targetOffsetY = { it }) ) { Column( verticalArrangement = Arrangement.spacedBy(16.dp) ) { // First Box with default parent animation (fadeIn & fadeOut) Box( modifier = Modifier .size(200.dp) .clip(RoundedCornerShape(8.dp)) .background(Color.Green), contentAlignment = Alignment.Center ) { Text(text = "Fade Box") } // Second Box with a custom slide animation Box( modifier = Modifier .size(200.dp) .clip(RoundedCornerShape(8.dp)) .background(Color.Blue) .animateEnterExit( enter = expandVertically(animationSpec = tween(1200)) + fadeIn(), exit = shrinkVertically(animationSpec = tween(800)) + fadeOut() ), contentAlignment = Alignment.Center ) { Text(text = "Slide Box") } } } // Toggle visibility button Button(onClick = { visible = !visible }) { Text(text = "Toggle") } } } < /code> < /li> [*] Composable, в котором он не работает: < /p> @OptIn(ExperimentalAnimationApi::class) @Composable fun AnimateAppAndDisApp( modifier: Modifier = Modifier ) { var visible by remember { mutableStateOf(false) } Column( modifier = Modifier.fillMaxSize(), verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally ) { Button(onClick = { visible = !visible }) { Text(if (visible) "Hide" else "Show") } Spacer(modifier = Modifier.height(20.dp)) AnimatedVisibility( visible = visible, enter = fadeIn(animationSpec = tween(1000)) + slideInVertically(initialOffsetY = { -it }), exit = fadeOut(animationSpec = tween(1000)) + slideOutVertically(targetOffsetY = { it }) ) { Column( modifier = Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally ) { // Default animation Text("Default Animation 1") Spacer(modifier = Modifier.height(10.dp)) // Overridden animation BasicText( "Custom Animation", modifier = Modifier.animateEnterExit( enter = expandVertically(animationSpec = tween(1200)) + fadeIn(), exit = shrinkVertically(animationSpec = tween(800)) + fadeOut() ) ) Spacer(modifier = Modifier.height(10.dp)) // Default animation Text("Default Animation 2") } } } } [/code] Подробнее здесь: [url]https://stackoverflow.com/questions/79392507/why-animateenterexit-modifier-is-working-in-one-case-but-not-in-other[/url]