gpt4 book ai didi

android - 如何在 Android Jetpack Compose 中创建任意方向的拖动手势

转载 作者:行者123 更新时间:2023-12-04 11:26:40 28 4
gpt4 key购买 nike

我想在@Composable 中检测一个手势,这将允许我在屏幕上向任何方向拖动一个元素。
我尝试使用 LongPressDragObserver 但是在拖动了一点之后,它会捕捉到一个方向(水平或垂直)并且偏移量根本不会改变另一个方向(它将一直等于 0)
我想要实现的示例功能:
长按 FAB 并在屏幕上拖动它,使其位置始终在用户的手指之下。
我正在使用撰写 1.0.0-alpha04
仅在一个方向上拖动的示例代码(感谢 Rafsanjani )

.dragGestureFilter(dragObserver = object : DragObserver { 
override fun onDrag(dragDistance: Offset): Offset {
val newX = dragDistance.x + verticalOffset.value
val newY = dragDistance.y + horizontalOffset.value
verticalOffset.value = newX
horizontalOffset.value = newY
return dragDistance
}
})

最佳答案

您可以使用 Modifier.pointerInputdetectDragGestures做你想做的事情。
例子:

   @Composable
fun Drag2DGestures() {
var size by remember { mutableStateOf(400.dp) }
val offsetX = remember { mutableStateOf(0f) }
val offsetY = remember { mutableStateOf(0f) }
Box(modifier = Modifier.size(size)){
Box(
Modifier
.offset { IntOffset(offsetX.value.roundToInt(), offsetY.value.roundToInt()) }
.background(Color.Blue)
.size(50.dp)
.pointerInput(Unit) {
detectDragGestures { change, dragAmount ->
change.consumeAllChanges()
offsetX.value = (offsetX.value + dragAmount.x)
.coerceIn(0f, size.width.toFloat() - 50.dp.toPx())

offsetY.value = (offsetY.value + dragAmount.y)
.coerceIn(0f, size.height.toFloat() - 50.dp.toPx())
}
}
)
Text("Drag the box around", Modifier.align(Alignment.Center))
}
}
将产生这个结果:
ٍٍٍ抱歉出现卡顿/丢帧,内置模拟器录像机无法流畅录制 60fps
enter image description here
撰写版本:alpha-11

关于android - 如何在 Android Jetpack Compose 中创建任意方向的拖动手势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64379464/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com