可以在AnimatedVisibility的onVisibilityChanged回调中使用postDelayed来让BringIntoViewRequester在动画结束后再执行。
示例代码如下:
@Composable
fun MyAnimatedView() {
var isVisible by remember { mutableStateOf(false) }
Box {
Button(onClick = { isVisible = !isVisible }) {
Text(if (isVisible) "Hide" else "Show")
}
AnimatedVisibility(
visible = isVisible,
enter = slideInHorizontally(),
exit = slideOutHorizontally(),
onVisibilityChanged = { visibility ->
if (visibility == Visibility.Visible) {
// Use postDelayed to delay the BringIntoViewRequester
val rootView = LocalView.current.rootView
rootView.postDelayed({
val request = BringIntoViewRequester
request.bringIntoView(rootView, rootView.findViewById(R.id.my_view))
}, 500)
}
}
) {
MyView()
}
}
}
@Composable
fun MyView() {
Box(modifier = Modifier
.fillMaxSize()
.background(Color.Blue)) {
Text(
text = "My View",
color = Color.White,
fontSize = 20.sp,
modifier = Modifier.align(Alignment.Center)
)
}
}