小编典典

结合detectTapGestures和detectDragGesturesAfterLongPress?

all

我们需要能够在 Jetpack Compose 中长按同一组件后检测到轻击和拖动手势。

要检测水龙头,我们可以这样做:

Modifier.pointerInput(graphData) {
    detectTapGestures(
        ...
    )
}

并在长按后检测拖动手势:

Modifier.pointerInput(graphData) {
    detectDragGesturesAfterLongPress(
        ...
    )
}

但不可能同时使用两者,因为第一个detect*会消耗指针事件:

Modifier.pointerInput(graphData) {
    detectTapGestures(
        ...
    )
    detectDragGesturesAfterLongPress(
        ...
    )
}

是否有可能以更方便的方式实现这一点,然后滚动我们自己的自定义函数来复制detectDragGesturesAfterLongPress 中的大部分代码?


阅读 93

收藏
2022-07-08

共1个答案

小编典典

通过链接两个 Modifier.pointerInput(Unit) 函数,您将能够检测到这两种手势。当然,如果拖动手势已经开始,您将无法检测到点击

val context = LocalContext.current

val modifier = Modifier
    .pointerInput(Unit) {
        detectTapGestures(
            onPress = {
                Toast
                    .makeText(context, "onPress", Toast.LENGTH_SHORT)
                    .show()
            },
            onTap = {
                Toast
                    .makeText(context, "onTap", Toast.LENGTH_SHORT)
                    .show()
            }
        )
    }

    .pointerInput(Unit) {
        detectDragGesturesAfterLongPress(
            onDragStart = {
                Toast
                    .makeText(context, "onDragStart", Toast.LENGTH_SHORT)
                    .show()
            },
            onDrag = { change, dragAmount ->
                println("DRAGGING$ dragAmount")

            }
        )
    }
2022-07-08