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

Jetpack Compose中拖拽Google Maps标记时如何使用InputHandler?

解决Google Map标记拖拽事件监听问题

你之前的代码无效是因为InputHandler需要作为GoogleMap组件的参数传入,而非单独声明。这里提供两种可行的监听方案:

方案一:通过GoogleMap的InputHandler统一处理

将InputHandler作为GoogleMap的参数传入,即可监听所有标记的拖拽事件:

GoogleMap(
    modifier = Modifier.fillMaxSize(),
    cameraPositionState = cameraPositionState,
    inputHandler = InputHandler(
        onMarkerDragStart = { marker ->
            Log.d(TAG, "拖拽开始: ${marker.id}")
        },
        onMarkerDrag = { marker ->
            Log.d(TAG, "拖拽中,当前位置: ${marker.position}")
        },
        onMarkerDragEnd = { marker ->
            Log.d(TAG, "拖拽结束: ${marker.id},最终位置: ${marker.position}")
        }
    )
) {
    Marker(
        state = MarkerState(
            position = LatLng(lat, lng)
        ),
        title = "Party",
        snippet = "Come to party.",
        draggable = true
    )
}

方案二:直接在Marker组件上绑定回调

Marker本身提供了拖拽相关的回调参数,无需额外使用InputHandler,逻辑更聚焦:

GoogleMap(
    modifier = Modifier.fillMaxSize(),
    cameraPositionState = cameraPositionState
) {
    Marker(
        state = MarkerState(
            position = LatLng(lat, lng)
        ),
        title = "Party",
        snippet = "Come to party.",
        draggable = true,
        onDragStart = { markerState ->
            Log.d(TAG, "标记拖拽开始")
        },
        onDrag = { markerState ->
            Log.d(TAG, "标记拖拽中,当前位置: ${markerState.position}")
        },
        onDragEnd = { markerState ->
            Log.d(TAG, "标记拖拽结束,最终位置: ${markerState.position}")
        }
    )
}

注意:两种方案都需要确保draggable属性设置为true,否则拖拽事件不会触发。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 00:52:14