Skip to content

GoogleMapViewHolder

Para acceder a las funciones específicas de la API de Google Maps, use el GoogleMapViewHolder. La definición de GoogleMapViewHolder es la siguiente:

typealias GoogleMapViewHolder = MapViewHolderInterface<MapView, GoogleMap>
class GoogleMapViewHolder(
override val mapView: MapView,
override val map: GoogleMap,
) : MapViewHolderInterface<MapView, GoogleMap> {
fun toScreenOffset(position: GeoPointInterface): Offset?
suspend fun fromScreenOffset(offset: Offset): GeoPoint?
}
  • mapView: MapView: MapView generado dentro del componente GoogleMapView
  • map: GoogleMap: Clase GoogleMap para manipular el MapView
  • toScreenOffset(position: GeoPointInterface): Offset?: Devuelve la posición en el mapa indicada por GeoPointInterface como un valor Dp con la parte superior izquierda del MapView como (0,0)
  • fromScreenOffset(offset: Offset): GeoPoint?: Devuelve la posición GeoPointInterface en el mapa para la posición especificada por el valor Dp con la parte superior izquierda del MapView como (0,0)

El GoogleMapViewHolder se puede obtener a través de getMapViewHolder() después de que se inicializa el mapa.

// Google Maps
val googleMapState = rememberGoogleMapViewState()
val googleHolder: GoogleMapViewHolder? = googleMapState.getMapViewHolder()
@Composable
fun MapViewHolderGoogleMapsExample(modifier: Modifier = Modifier) {
val context = LocalContext.current
// Posición de la cámara del mapa
val mapViewState = rememberGoogleMapViewState(
cameraPosition = MapCameraPosition(
position = GeoPoint.fromLatLong(28.53456, 77.192845),
zoom = 12.0
),
)
// Usando mutableStateOf, recomponer cuando cambie mapStyle
var mapStyle by remember { mutableStateOf<MapStyleOptions?>(null) }
// Obtener ViewHolder
val googleMapViewHolder = mapViewState.getMapViewHolder()
LaunchedEffect(googleMapViewHolder, mapStyle) {
if (googleMapViewHolder == null) return@LaunchedEffect
googleMapViewHolder.map.setMapStyle(mapStyle)
}
Column(modifier = modifier) {
Row(
modifier = Modifier.fillMaxWidth(),
) {
Spacer(modifier = Modifier.size(20.dp))
// Google Maps normal
Button(onClick = {
mapStyle = null
}) {
Text(
text = "Normal"
)
}
Spacer(modifier = Modifier.size(20.dp))
// Diseño de mapa simplificado
Button(onClick = {
mapStyle = MapStyleOptions.loadRawResourceStyle(context, R.raw.style_map)
}) {
Text(
text = "Simplified"
)
}
}
GoogleMapView(
state = mapViewState,
modifier = Modifier.fillMaxSize(),
) {}
}
}