Skip to content

Marcador

Un marcador es una anotación de punto que se puede colocar en el mapa en ubicaciones geográficas específicas. Admite iconos personalizados, interacciones y animaciones.

Cuando tienes pocos marcadores, especificar opciones directamente es más fácil. Especificar id puede reducir Recomposiciones innecesarias.

@Composable
fun MapViewScope.Marker(
position: GeoPointInterface,
clickable: Boolean = true,
draggable: Boolean = false,
icon: MarkerIconInterface? = null,
extra: Serializable? = null,
id: String? = null,
onClick: OnMarkerEventHandler? = null,
onDragStart: OnMarkerEventHandler? = null,
onDrag: OnMarkerEventHandler? = null,
onDragEnd: OnMarkerEventHandler? = null,
onAnimateStart: OnMarkerEventHandler? = null,
onAnimateEnd: OnMarkerEventHandler? = null,
)
  • position: Coordenadas geográficas que representan la posición del marcador (GeoPointInterface)
  • clickable: Si el marcador responde a clics (por defecto: true)
  • draggable: Si el marcador se puede arrastra (por defecto: false)
  • icon: Icono personalizado para el marcador (MarkerIconInterface?)
  • extra: Datos adicionales asociados al marcador (Serializable?)
  • id: Identificador único para el marcador (String?, se genera automáticamente si no se especifica)
  • onClick: Se invoca cuando se hace clic en el marcador.
  • onDragStart: Se invoca cuando se comienza a arrastrar el marcador.
  • onDrag: Se invoca mientras se arrastra el marcador.
  • onDragEnd: Se invoca cuando finaliza la operación de arrastre del marcador.
  • onAnimateStart: Se activa cuando comienza animate().
  • onAnimateEnd: Se activa cuando finaliza animate().

Icono de marcador estándar con apariencia personalizable:

DefaultIcon(
scale: Float = 1.0f,
label: String? = null,
fillColor: Color = Color.Red,
strokeColor: Color = Color.Black,
strokeWidth: Dp = 1.dp,
labelTextColor: Color = Color.White,
labelStrokeColor: Color? = null,
debug: Boolean = false
)

Marcador que utiliza un recurso Drawable como fondo:

DrawableDefaultIcon(
backgroundDrawable: Drawable,
scale: Float = 1.0f,
strokeColor: Color? = null,
strokeWidth: Dp = 1.dp
)

Marcador que utiliza una imagen Drawable personalizada:

ImageIcon(
drawable: Drawable,
anchor: Offset = Offset(0.5f, 0.5f),
debug: Boolean = false
)
// Reemplaza MapView con el componente del proveedor de mapas que hayas elegido, como GoogleMapView o MapboxMapView
MapView(state = mapViewState) {
Marker(
position = GeoPoint.fromLatLong(37.7749, -122.4194),
extra = "San Francisco",
id = "san-francisco-marker"
)
}
Reemplaza MapView con el componente del proveedor de mapas que hayas elegido, como GoogleMapView o MapboxMapView
MapView(state = mapViewState) {
Marker(
position = GeoPoint.fromLatLong(37.7749, -122.4194),
icon = DefaultIcon(
scale = 1.5f,
label = "SF",
fillColor = Color.Blue,
strokeColor = Color.White,
strokeWidth = 2.dp
),
extra = "San Francisco with custom icon",
id = "custom-sf-marker"
)
}
@Composable
fun DraggableMarkerExample() {
val markerState = MarkerState(
position = GeoPoint.fromLatLong(37.7749, -122.4194),
draggable = true,
icon = DefaultIcon(
label = "Drag me",
fillColor = Color.Green
),
onDrag = { markerState ->
println("position: ${GeoPoint.from(markerState.position).toUrlValue(6)}")
}
)
// Reemplaza MapView con el componente del proveedor de mapas que hayas elegido, como GoogleMapView o MapboxMapView
MapView(
state = mapViewState
) {
Marker(markerState)
}
}

Múltiples marcadores con iconos diferentes

Section titled “Múltiples marcadores con iconos diferentes”
// Reemplaza MapView con el componente del proveedor de mapas que hayas elegido, como GoogleMapView o MapboxMapView
MapView(state = mapViewState) {
// Default icon with different scales
Marker(
position = GeoPoint.fromLatLong(37.7749, -122.4194),
icon = DefaultIcon(scale = 0.7f, label = "Small")
)
Marker(
position = GeoPoint.fromLatLong(37.7849, -122.4094),
icon = DefaultIcon(scale = 1.0f, label = "Normal")
)
Marker(
position = GeoPoint.fromLatLong(37.7949, -122.3994),
icon = DefaultIcon(scale = 1.4f, label = "Large")
)
// Custom colored marker
Marker(
position = GeoPoint.fromLatLong(37.7649, -122.4294),
icon = DefaultIcon(
fillColor = Color.Yellow,
strokeColor = Color.Black,
strokeWidth = 2.dp,
label = "Custom"
)
)
// Drawable icon marker
val context = LocalContext.current
AppCompatResources.getDrawable(context, R.drawable.custom_icon)?.let { drawable ->
Marker(
position = GeoPoint.fromLatLong(37.7549, -122.4394),
icon = DrawableDefaultIcon(
backgroundDrawable = drawable,
scale = 1.2f
)
)
}
}
  • Drop - Animación donde el marcador se mueve desde la parte superior de la pantalla a la posición
  • Bounce - El marcador se mueve desde la parte superior de la pantalla a la posición y luego rebota
vista previa de animación de rebote y caída del marcador