如何在Compose中控制AnimatedVisibility的持续时间?

10
我在我的项目中使用了Compose AnimatedVisibility,但动画时间太短了,有相关的API吗?
2个回答

8

以下示例摘自codelabs,您可以使用每个动画的durationMillis来添加自己的动画规格,一个用于进入,一个用于退出:

 AnimatedVisibility(
    visible = shown,
    enter = slideInVertically(
        // Enters by sliding down from offset -fullHeight to 0.
        initialOffsetY = { fullHeight -> -fullHeight },
        animationSpec = tween(durationMillis = 150, easing = LinearOutSlowInEasing)
    ),
    exit = slideOutVertically(
        // Exits by sliding up from offset 0 to -fullHeight.
        targetOffsetY = { fullHeight -> -fullHeight },
        animationSpec = tween(durationMillis = 250, easing = FastOutLinearInEasing)
    )
) {
    Surface(
        modifier = Modifier.fillMaxWidth(),
        color = MaterialTheme.colors.secondary,
        elevation = 4.dp
    ) {
        Text(
            text = stringResource(R.string.edit_message),
            modifier = Modifier.padding(16.dp)
        )
    }
}

2

这是一种方法

@OptIn(ExperimentalAnimationApi::class)
@Composable
fun AnimatedVisibilityMark2(content: @Composable () -> Unit, visible: Boolean, durationMillis: Int) {
    AnimatedVisibility(
        visible = visible,
        enter = fadeIn(
            animationSpec = keyframes {
                this.durationMillis = durationMillis
            }
        ),
        exit = fadeOut(
            animationSpec = keyframes {
                this.durationMillis = durationMillis
            }
        )
    ){
        content()
    }
}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接