向左滑动的操作。 Jetpack Compose,Android

问题描述 投票:0回答:1

我是 Android 开发新手,现在正在开发我的第一个“真实项目”(只是想复制 iPhone 计算器)。问题是如何像在 iPhone 上一样在屏幕左侧滑动来实现删除?

在这里我已经尝试过一些东西,但问题是,是的,代码可以工作,但一次滑动它可以删除多个数字,而不仅仅是一个。我该如何解决它?

Box(
    contentAlignment = Alignment.BottomEnd,
    modifier = Modifier
        .fillMaxWidth()
        .height(340.dp)
        .pointerInput(Unit) {
            detectHorizontalDragGestures { change, dragAmount ->
                val x = dragAmount
                if (x < 0 && currentValue != "0" && !currentValue.contains("-") && currentValueOnlyWithNumbers.length == 1) {
                    currentValue = "0"
                } else if (x < 0 && currentValue.contains("-") && currentValueOnlyWithNumbers.length == 1) {
                    currentValue = "0"
                } else if (x < 0 && currentValueOnlyWithNumbers.length > 1) {
                    currentValue =
                        if (currentValue.contains(" ") && currentValue[currentValue.length - 2] == ' ') {
                            currentValue.dropLast(2)
                        } else {
                            currentValue.dropLast(1)
                        }
                }
            }
        }
)
android kotlin android-jetpack-compose gesture
1个回答
0
投票

detectHorizontalDragGestures
具有
onDragStart
onDragEnd
参数,可用于检测单个手势。更新每个拖动事件的总偏移量,并检查手势是否为
onDragEnd
中向左滑动。或者,您还可以记住拖动开始的时间,以确定手势是否足够快以被视为滑动。

在此示例中,我使用任意值

-300
作为滑动检测阈值。

var offset by remember { mutableFloatStateOf(0f) }

Box(
    contentAlignment = Alignment.BottomEnd,
    modifier = Modifier
        .fillMaxWidth()
        .height(340.dp)
        .background(Color.LightGray)
        .pointerInput(Unit) {
            detectHorizontalDragGestures(
                onDragStart = { offset = 0f },
                onDragEnd = {
                    if (offset < -300) {
                        // Swipe left detected, implement deletion here
                    }
                }
            ) { _, dragAmount ->
                offset += dragAmount
            }
        }
)
© www.soinside.com 2019 - 2024. All rights reserved.