Android Studio 如何从中心应用animateContentSize?

bhmjp9jg  于 12个月前  发布在  Android
关注(0)|答案(1)|浏览(114)

实际上,合成是从中心动画,但它的内容,这是一个按钮,是从左上角移动到中心,而动画合成。
我想让按钮从中心开始动画。我试着给按钮和盒子添加.animateContentSize,但按钮仍然从左上角到中心动画。
下面是代码:

@Composable
fun TopScreen(
    isScaffold: MutableState<Boolean>,
){
    AnimatedVisibility(
        visible = !isScaffold.value,
        modifier = Modifier
            .fillMaxSize()
            .animateContentSize(
                animationSpec = tween(durationMillis = 500, easing = LinearEasing)
            )
    ){
        Box(
            modifier = Modifier
                .fillMaxSize()
                .background(Color.LightGray),
            contentAlignment = Alignment.Center
        ){
            Button(
                onClick = {
                    isScaffold.value = true
                },
                modifier = Modifier

            ) {
                Text(text = "GO TO BOTTOM SCREEN")
            }
        }
    }
}

字符串

yyyllmsg

yyyllmsg1#

你不需要Modiifer.animateContentSize()AnimatedVisibility组合,它有scaleInscaleOut转换。所有你可以使用的转换都可以在官方文档中找到。
https://developer.android.com/jetpack/compose/animation/composables-modifiers#enter-exit-transition
你也可以使用状态提升来代替传递和修改State

@Composable
fun TopScreen(
    isScaffold: Boolean,
    onChange: (Boolean) -> Unit
) {
    AnimatedVisibility(
        visible = !isScaffold,
        modifier = Modifier
            .fillMaxSize(),
        enter = scaleIn(tween(durationMillis = 500, easing = LinearEasing)),
        exit = scaleOut(tween(durationMillis = 500, easing = LinearEasing))

    ) {
        Box(
            modifier = Modifier
                .fillMaxSize()
                .background(Color.LightGray),
            contentAlignment = Alignment.Center
        ) {
            Button(
                onClick = {
                    onChange(isScaffold.not())
                },
                modifier = Modifier

            ) {
                Text(text = "GO TO BOTTOM SCREEN")
            }
        }
    }
}

字符串

相关问题