小编Don*_*dal的帖子

重置 Jetpack Compose 中可拖动项目的偏移动画

我有一个可以垂直拖动的绿色方块。但每当我停止拖动它时,我希望它通过动画将偏移重置为开始位置。我像这样尝试过,但我无法弄清楚。有人知道该怎么做吗?

@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)

animation android drag kotlin android-jetpack-compose

6
推荐指数
1
解决办法
5133
查看次数

BottomSheetScaffold 的工作表在重组时自动扩展

在 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

6
推荐指数
1
解决办法
4502
查看次数