コンテンツにスキップ

MapboxMapViewHolder

Mapbox SDK固有の機能にアクセスするためには、MapboxMapViewHolderを使います。 MapboxMapViewHolderの定義は次のとおりです。

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: MapboxViewコンポーネント内部で生成したMapView
  • map: Mapbox: MapViewを操作するためのMapboxクラス
  • toScreenOffset(position: GeoPointInterface): Offset?: GeoPointで示す地図上の位置を、MapView左上を(0,0)としたDp値で返します
  • fromScreenOffsetSync(offset: Offset): GeoPoint?: MapView左上を(0,0)としたDp値で指定した位置の、地図上でのGeoPoint位置を返します
  • fromScreenOffset(coordinate: ScreenCoordinate): GeoPoint?: MapView左上を(0,0)としたScreenCoordinate値で指定した位置の、地図上でのGeoPoint位置を返します
  • fromScreenOffset(offset: Offset): GeoPoint?: MapView左上を(0,0)としたDp値で指定した位置の、地図上でのGeoPoint位置を返します

MapboxMapViewHolderは、地図の初期化後に getMapViewHolder()を通じて取得できます。

// 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)) {
// 位置情報アクセス許可後の処理(例: Maps SDK の LocationComponent を有効化してデバイスの位置を表示)
} 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>) {
// 位置情報アクセス権限を取得するための説明を表示
}
override fun onPermissionResult(granted: Boolean) {
if (granted) {
// 位置情報アクセス許可後の処理(例: Maps SDK の LocationComponent を有効化してデバイスの位置を表示)
} else {
// ユーザーが権限を拒否した
}
}
}
}
@Composable
fun BasicMapExample(modifier: Modifier = Modifier) {
val mapViewState = rememberMapboxMapViewState(
cameraPosition = MapCameraPosition(
position = GeoPoint.fromLatLong(35.706400, 139.763635),
zoom = 13.0
),
)
// 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()
}
) {}
}