android - Jetpack Compose 指针输入状态提升

标签 android android-jetpack android-jetpack-compose

我一直在尝试修改 Android Jetpack Compose official Documentation's example对于手势,使得偏移的状态在父 View 中被提升。

官方例子可以正常运行,但是修改后有卡顿,拖动后盒子回到原来的位置。

修改后的版本几乎和原来的差不多,除了状态被提升了。

@Composable
fun DragGesturesExampleWithHoistedState() {
    Box(
        modifier = Modifier
            .fillMaxSize()
            .background(Color.White)
    ) {
        var offsetX by remember { mutableStateOf(0f) }
        var offsetY by remember { mutableStateOf(0f) }

        DragGesturesBox(
            modifier = Modifier.offset {
                IntOffset(offsetX.roundToInt(), offsetY.roundToInt())
            },
            onDrag = {
                offsetX = it.x
                offsetY = it.y
            }
        )
    }
}

@Composable
fun DragGesturesBox(
    modifier: Modifier = Modifier,
    onDrag: (Offset) -> Unit
) {
    Box(
        modifier
            .background(Color.Blue)
            .size(50.dp)
            .pointerInput("my unique key") { // Does not work with Unit either
                detectDragGestures { change, dragAmount ->
                    change.consumeAllChanges()
                    onDrag(dragAmount)
                }
            }
    )
}


@Preview
@Composable
fun DragGesturesExampleWithHoistedStatePreview() {
    DragGesturesExampleWithHoistedState()
}

有什么我遗漏的吗?

最佳答案

改变

onDrag = {
    offsetX = it.x
    offsetY = it.y
}

onDrag = {
    offsetX += it.x
    offsetY += it.y
}

它会起作用。

关于android - Jetpack Compose 指针输入状态提升,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67615540/

相关文章:

java - EditText 不出现复制粘贴选项

Java Calendar 实例递增 DAY_OF_MONTH 作为递减(仅)HOUR 或 MINUTE 的副作用

android - 为 Flutter 项目添加 Android 运行/调试配置

android - 我可以将使用 android 支持的库与 Androidx 项目一起使用吗?

android-studio - 在处理数据时,ViewModel 类对于哪些其他情况有用(除了屏幕旋转)?

android - 在android导航组件中添加进入动画开始目的地

android - kotlinCompilerVersion 已弃用

java - In-App Billing V3 - 购买 3 个月后过期的对象 - Android

android - 尝试使用 Android material3 时出现 Unresolved reference 错误

android - 撰写中的条件导航,无需单击