You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jetpack Compose多点触控手势:如何实现仅双指拖拽?

解决方案

要实现仅双指拖拽,同时保留双指缩放和旋转功能,我们可以替换默认的transformable修饰符,改用更灵活的pointerInput结合detectTransformGestures手势检测器,通过判断触摸点数量来控制拖拽操作的触发条件。

修改后的代码如下:

@Composable
fun TransformableSample() {
    var scale by remember { mutableStateOf(1f) }
    var rotation by remember { mutableStateOf(0f) }
    var offset by remember { mutableStateOf(Offset.Zero) }

    Box(
        Modifier
            .graphicsLayer(
                scaleX = scale,
                scaleY = scale,
                rotationZ = rotation,
                translationX = offset.x,
                translationY = offset.y
            )
            .pointerInput(Unit) {
                detectTransformGestures(
                    panZoomLock = false,
                    onGesture = { _, pan, zoom, rotationAngle, pointerCount ->
                        // 仅当触摸点数量≥2时,才处理拖拽偏移
                        if (pointerCount >= 2) {
                            offset += pan
                        }
                        // 缩放和旋转仅由双指触发,保持原有逻辑
                        scale *= zoom
                        rotation += rotationAngle
                    }
                )
            }
            .background(Color.Blue)
            .fillMaxSize()
    )
}

关键说明:

  • detectTransformGestures的回调参数pointerCount可以获取当前触摸屏幕的手指数量;
  • 我们通过pointerCount >= 2的判断,限制只有双指操作时才更新拖拽偏移量offset,单指触摸不会触发拖拽;
  • 缩放和旋转逻辑保持不变,只有双指操作才能触发这些变换,符合预期需求。

内容的提问来源于stack exchange,提问作者gaohomway

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 09:40:25