我是 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)
}
}
}
}
)
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
}
}
)