我有一个可以垂直拖动的绿色方块。但每当我停止拖动它时,我希望它通过动画将偏移重置为开始位置。我像这样尝试过,但我无法弄清楚。有人知道该怎么做吗?
@Composable
fun DraggableSquare() {
var currentOffset by remember { mutableStateOf(0F) }
val resetAnimation by animateIntOffsetAsState(targetValue = IntOffset(0, currentOffset.roundToInt()))
var shouldReset = false
Box(contentAlignment = Alignment.TopCenter, modifier = Modifier.fillMaxSize()) {
Surface(
color = Color(0xFF34AB52),
modifier = Modifier
.size(100.dp)
.offset {
when {
shouldReset -> resetAnimation
else -> IntOffset(0, currentOffset.roundToInt())
}
}
.draggable(
state = rememberDraggableState { delta -> currentOffset += delta },
orientation = Orientation.Vertical,
onDragStopped = {
shouldReset = true
currentOffset = 0F
}
)
) {}
}
}
Run Code Online (Sandbox Code Playgroud) 在 Jetpack Compose 中,我有BottomSheetScaffold
一些内容。该内容是从 ViewModel 中观察到的,如下所示:
BottomSheetScaffold(
sheetContent = { SheetContent(sheetData = viewModel.sheetData) }
) {}
Run Code Online (Sandbox Code Playgroud)
因此,每当viewModel.sheetData
发生变化时,就会触发重组。每当发生这种情况时,底部工作表就会自动展开。这是一个错误还是一个功能?我可以禁用这个吗?我使用的是最新版本:1.1.0-alpha01
LaunchedEffect
编辑:这是一个使用ViewModel 代替的示例。
@OptIn(ExperimentalMaterialApi::class)
@Preview
@Composable
fun HomeScreen() {
var addSheetData by remember { mutableStateOf(false) }
LaunchedEffect(true) {
delay(2000)
addSheetData = true
}
BottomSheetScaffold(sheetContent = {
if (addSheetData) {
Column {
Text(text = "Text1", fontSize = 36.sp)
Text(text = "Text2", fontSize = 36.sp)
Text(text = "Text3", fontSize = 36.sp)
Text(text = "Text4", fontSize = 36.sp)
Text(text = "Text5", fontSize …
Run Code Online (Sandbox Code Playgroud) bottom-sheet material-components-android android-jetpack-compose