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
相关产品推荐
相关产品推荐

