如何重置动画合成视图的状态

3

我正在构建一个引导页面的片段,为用户提供每个屏幕的提示。这里有几页,每页只有几行:

第一页

  • 这个图标是干什么的
  • 那个图标是干什么的

按钮:下一步

第二页

  • 这个图标是干什么的
  • 那个图标是干什么的

按钮:完成

我想让每个页面上的视图逐渐从屏幕底部淡入。

然后,对于新页面,我希望重置所有项目,并再次从顶部向下淡入。

我尝试使用AnimatedVisibility,但问题在于元素保持其状态,因此在第二页上不会播放淡入效果。也许AnimatedVisibility并不是我想要做的正确选择?

下面是一行代码。我希望在每次重新组合时重置状态对象。

或者,如果有人有更好的建议 - 那也是很好的。

@Composable
    private fun Line(line: ActionResources, modifier: Modifier) {
        val state = remember {
            MutableTransitionState(false).apply {
                // Start the animation immediately.
                targetState = true
            }
        }
        AnimatedVisibility(state,
            enter = fadeIn(animationSpec = tween(durationMillis = 1000)),
            exit = fadeOut(animationSpec = tween(durationMillis = 1000))
        ) {
            Row(
                modifier = modifier
                    .padding(16.dp)
            ) {
                val color = line.color?.let { colorResource(it) } ?: MaterialTheme.colors.onSurface
                line.icon?.also {
                    Icon(
                        painter = painterResource(it),
                        tint = color,
                        contentDescription = stringResource(id = R.string.menu_search),
                        modifier = Modifier.padding(end = 8.dp).size(24.dp)
                    )
                }
                line.label?.also {
                    Text(
                        modifier = Modifier,
                        style = MaterialTheme.typography.body1,
                        color = color,
                        text = it
                    )
                }
            }
        }
    }
1个回答

1

我无法编译您的代码,特别是ActionResources,但基于此,

我想要在每次重新渲染时重置状态对象。

我唯一能建议的是使用remember {...}line参数,为其提供一个key

 val state = remember (line) {
        MutableTransitionState(false).apply {
            // Start the animation immediately.
            targetState = true
        }
  }

我不确定这是否能解决你的问题,但如果你想让这个状态在后续的重新渲染中假定line参数总是不同而进行重新计算,那么将其作为remember {...}的key将保证重新计算


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