我正在从文档中学习animateDpAsState。我做它没有任何问题,但是我看到发生了很多重组。所以我想知道推荐的方法是什么?
@Composable
private fun PaddingViewAnimation() {
var visible by remember { mutableStateOf(true) }
val iconOffsetAnimation: Dp by animateDpAsState(
if (visible) 13.dp else 0.dp, tween(1000)
)
PaddingViewAnimationStateLess(
{ iconOffsetAnimation },
visible,
onVisibleChange = {
visible = it
}
)
}
填充视图动画无状态
@Composable
fun PaddingViewAnimationStateLess(
iconOffsetAnimation: () -> Dp,
visible: Boolean,
onVisibleChange: (Boolean) -> Unit,
) {
Column(
modifier = Modifier
.fillMaxWidth()
.padding(start = 16.dp, top = 16.dp)
) {
Image(
modifier = Modifier.padding(top = iconOffsetAnimation()),
imageVector = Icons.Default.ShoppingCart,
contentDescription = null,
)
Button(
modifier = Modifier.padding(top = 10.dp),
onClick = {
onVisibleChange(!visible)
},
) {
Text(text = "Move Text")
}
}
}
当第一次按钮点击动画发生,我可以看到在布局检查器。我不知道这是正常的,或者我们可以解决这个问题。谢谢
1条答案
按热度按时间t2a7ltrp1#
除了设置顶部填充的动画之外,您还可以使用
graphicsLayer
修改器和lambda块进行不同的y平移,这会导致层属性更新,而不会触发重新组合和重新布局。您可以将其应用于
Column
或每个子对象。比如: