Skip to content

Event Handlers

MapConductor provides comprehensive event handling for user interactions with the map and its components. Map events are handled on the MapView component, and overlay events are configured on each State.

MapView(
...,
onMapLoaded: OnMapLoadedHandler? = null,
onMapClick: OnMapEventHandler? = null,
onMapLongClick: OnMapEventHandler? = null,
onCameraMoveStart: OnCameraMoveHandler? = null,
onCameraMove: OnCameraMoveHandler? = null,
onCameraMoveEnd: OnCameraMoveHandler? = null,
) { }

Map Events

Map Initialization

  • Called when the map has finished loading and is ready for interaction.
onMapLoaded: OnMapLoadedHandler? = null
  • Example
MapView(
...
onMapLoaded: {
println("Map loaded")
},
) {
...
}

Map Interactions

  • Called when the user taps the map (an area that is not an overlay).
onMapClick: OnMapEventHandler? = null

Event data: GeoPointInterface - geographic coordinate that was tapped

  • Example
MapView(
...
onMapClick = { geoPoint ->
println("Map clicked at: ${geoPoint.latitude}, ${geoPoint.longitude}")
}
) {
...
}

onMapLongClick

  • Called when the user long-presses the map (an area that is not an overlay).
onMapLongClick: OnMapEventHandler? = null

Event data: GeoPointInterface - geographic coordinate that was long-pressed

  • Example
MapView(
onMapLongClick = { geoPoint ->
println("Long-pressed at: ${geoPoint.latitude}, ${geoPoint.longitude}")
}
) {
// ...
}

Marker Events

All marker events receive a MarkerState object that contains the marker’s current state.

Click Event

  • Called when a marker is tapped.
MarkerState(
...,
onClick: OnMarkerEventHandler? = null,
)
  • Example
val markerState = MarkerState(
...,
onClick = { marker ->
println("Marker clicked at: ${marker.position.latitude}, ${marker.position.longitude}")
},
)
Marker(markerState)

Drag Events

  • onDragStart: Called when dragging starts
  • onDrag: Called continuously while dragging
  • onDragEnd: Called when dragging ends
MarkerState(
...,
onDragStart: OnMarkerEventHandler? = null,
onDrag: OnMarkerEventHandler? = null,
onDragEnd: OnMarkerEventHandler? = null,
)
var markerState = MarkerState(
...,
draggable = true,
onDragStart = { draggedMarker ->
println("Drag started: ${draggedMarker.id}")
},
onDrag = { draggedMarker ->
if (draggedMarker.id == markerState.id) {
markerState = markerState.copy(position = draggedMarker.position)
}
},
onDragEnd = { draggedMarker ->
println("Drag ended: ${draggedMarker.id}")
},
)
Marker(markerState)

Animation Events

  • Called when marker animations start and end.
MarkerState(
...,
onAnimateStart: OnMarkerEventHandler? = null,
onAnimateEnd: OnMarkerEventHandler? = null,
)

Overlay Events

Circle Events

  • Called when a circle is tapped.
CircleState(
...,
onClick: OnCircleEventHandler? = null,
)

Event data: CircleEvent

data class CircleEvent(
val state: CircleState,
val clicked: GeoPointInterface
)
  • Example
Circle(
...,
onClick = { event ->
println("A circle clicked at: ${event.clicked.latitude}, ${event.clicked.longitude}")
event.state.fillColor = Color.Red.copy(
opacity = 0.7f,
)
},
)

Polyline Events

  • Called when a polyline is tapped.
PolylineState(
...,
onClick: OnPolylineEventHandler? = null,
)

Event data: PolylineEvent

data class PolylineEvent(
val state: PolylineState,
val clicked: GeoPointInterface
)
  • Example
Polyline(
...,
onClick = { event ->
println("A polyline clicked at: ${event.clicked.latitude}, ${event.clicked.longitude}")
event.state.strokeColor = Color.Red
},
)