抬头仰望星空,是否能发现自己的渺小。

伪斜杠青年

人们总是混淆了欲望和理想

Jetpack Compose detectTapDragGestures

这两天用 compose 写了一个九宫格,里面用了一个 detectDragGestures ,有很多回调,但唯独没有 onTap,以至于我点击时收不到回调无法做绘制,于是点进去看了下源码,挺好理解的,也很好改,copy 出来加两行代码就好了。

suspend fun PointerInputScope.detectTapDragGestures(
    onDown: (Offset) -> Unit = { },
    onDragStart: (Offset) -> Unit = { },
    onDragEnd: () -> Unit = { },
    onDragCancel: () -> Unit = { },
    onDrag: (change: PointerInputChange, dragAmount: Offset) -> Unit
) {
    forEachGesture {
        awaitPointerEventScope {
            val down = awaitFirstDown(requireUnconsumed = false)
            var drag: PointerInputChange?
            var overSlop = Offset.Zero
            onDown.invoke(down.position)
            do {
                drag = awaitTouchSlopOrCancellation(down.id) { change, over ->
                    change.consumePositionChange()
                    overSlop = over
                }
            } while (drag != null && !drag.positionChangeConsumed())
            if (drag != null) {
                onDragStart.invoke(drag.position)
                onDrag(drag, overSlop)
                if (
                    !drag(drag.id) {
                        onDrag(it, it.positionChange())
                        it.consumePositionChange()
                    }
                ) {
                    onDragCancel()
                } else {
                    onDragEnd()
                }
            }
        }
    }
}

红字部分是我加的,其他都是 detectDragGestures 源码,kotlin 的代码,应该挺好理解的,以上。

后续:直接使用 onDragStart 即可。

再后续:直接组合即可:

modifier = Modifier.pointerInput(Unit) {
                    detectTapGestures(
                        onTap = {
                           
                        }
                    )
                }
                .pointerInput(Unit) {
                    detectDragGestures(onDragStart = {
                       
                    }, onDrag = { change, dragAmount ->
                       
                    })
                }

本站由以下主机服务商提供服务支持:

0条评论

发表评论