Skip to content

MapboxMapViewHolder

Para acceder a las funciones específicas del SDK de Mapbox, use el MapboxMapViewHolder. La definición de MapboxMapViewHolder es la siguiente:

typealias MapboxMapViewHolder = MapViewHolderInterface<MapView, MapboxMap>
class MapboxMapViewHolder(
override val mapView: MapView,
override val map: MapboxMap,
) : MapViewHolderInterface<MapView, MapboxMap>,
MapboxLifecycleObserver {
fun toScreenOffset(position: GeoPointInterface): Offset?
fun fromScreenOffsetSync(offset: Offset): GeoPoint?
fun fromScreenOffset(coordinate: ScreenCoordinate): GeoPoint?
suspend fun fromScreenOffset(offset: Offset): GeoPoint?
}
  • mapView: MapView: MapView generado dentro del componente MapboxView
  • map: Mapbox: Clase Mapbox 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)
  • fromScreenOffsetSync(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)
  • fromScreenOffset(coordinate: ScreenCoordinate): GeoPoint?: Devuelve la posición GeoPointInterface en el mapa para la posición especificada por el valor ScreenCoordinate 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 MapboxMapViewHolder se puede obtener a través de getMapViewHolder() después de que se inicializa el mapa.

// Mapbox
val mapboxState = rememberMapboxMapViewState()
val mapboxHolder: MapboxMapViewHolder? = mapboxState.getMapViewHolder()
class MainActivity : ComponentActivity() {
lateinit var permissionsManager: PermissionsManager
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
if (PermissionsManager.areLocationPermissionsGranted(this)) {
// Proceso después del permiso de acceso a la ubicación (ej: habilitar LocationComponent del SDK de Maps para mostrar la ubicación del dispositivo)
} else {
permissionsManager = PermissionsManager(this.permissionsListener)
permissionsManager.requestLocationPermissions(this)
}
setContent {
MapConductorSDKTheme {
Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
BasicMapExample(
modifier =
Modifier
.padding(innerPadding)
.fillMaxSize(),
)
}
}
}
}
var permissionsListener: PermissionsListener = object : PermissionsListener {
override fun onExplanationNeeded(permissionsToExplain: List<String>) {
// Mostrar explicación para obtener permiso de acceso a la ubicación
}
override fun onPermissionResult(granted: Boolean) {
if (granted) {
// Proceso después del permiso de acceso a la ubicación (ej: habilitar LocationComponent del SDK de Maps para mostrar la ubicación del dispositivo)
} else {
// El usuario denegó el permiso
}
}
}
}
@Composable
fun BasicMapExample(modifier: Modifier = Modifier) {
val mapViewState = rememberMapboxMapViewState(
cameraPosition = MapCameraPosition(
position = GeoPoint.fromLatLong(35.706400, 139.763635),
zoom = 13.0
),
)
// Obtener ViewHolder
var mapboxMapViewHolder by remember { mutableStateOf<MapboxMapViewHolder?>(null) }
LaunchedEffect(mapboxMapViewHolder) {
mapboxMapViewHolder?.let { holder ->
with(holder.mapView) {
location.locationPuck = createDefault2DPuck(withBearing = true)
location.enabled = true
location.pulsingEnabled = true
location.puckBearing = PuckBearing.COURSE
location.puckBearingEnabled = true
viewport.transitionTo(
targetState = viewport.makeFollowPuckViewportState(),
transition = viewport.makeImmediateViewportTransition()
)
}
}
}
MapboxMapView(
state = mapViewState,
modifier = modifier,
onMapLoaded = {
mapboxMapViewHolder = mapViewState.getMapViewHolder()
}
) {}
}