This example demonstrates zoom functionality in OpenMapView, including custom zoom controls and pinch-to-zoom gestures with real-time status display.
- Map tile rendering with zoom support
- Custom zoom toolbar with +/- buttons
- Pinch-to-zoom gesture detection
- Real-time zoom level display
- Camera state tracking (Idle/Moving)
- Zoom limits (min: 2.0, max: 19.0)
- Open the OpenMapView project in Android Studio
- Select
examples.Example02Zoomfrom the run configuration dropdown - Click Run (green play button)
- Deploy to your device or emulator
# From project root - build, install, and launch
./gradlew :examples:Example02Zoom:installDebug
# Launch the app
adb shell am start -n de.afarber.openmapview.example02zoom/.MainActivityexample02zoom/
├── MainActivity.kt # Main activity and MapViewScreen composable
├── ZoomToolbar.kt # Vertical toolbar with +/- zoom buttons
├── StatusToolbar.kt # Status overlay showing zoom level and camera state
└── Colors.kt # OSM-inspired colors and shared dimensions
@Composable
fun MapViewScreen() {
val lifecycleOwner = LocalLifecycleOwner.current
var mapView: OpenMapView? by remember { mutableStateOf(null) }
var zoomLevel by remember { mutableStateOf("14.0") }
Box(modifier = Modifier.fillMaxSize()) {
AndroidView(
factory = { ctx ->
OpenMapView(ctx).apply {
lifecycleOwner.lifecycle.addObserver(this)
setCenter(LatLng(51.4661, 7.2491))
setZoom(14.0f)
mapView = this
}
},
modifier = Modifier.fillMaxSize(),
)
StatusToolbar(zoomLevel = zoomLevel, cameraState = cameraState, ...)
ZoomToolbar(onZoomInClick = { ... }, onZoomOutClick = { ... }, ...)
}
}- setZoom(): Sets zoom level (2.0 = world view, 19.0 = street level)
- getZoom(): Returns current zoom level
- Pinch gesture: Built-in ScaleGestureDetector in OpenMapView
- Zoom limits: Automatically enforced to prevent over-zoom
- OnCameraMoveListener: Callback for camera changes during zoom
- Tap + button to zoom in, observe zoom level update
- Tap - button to zoom out, observe zoom level update
- Pinch to zoom using two fingers
- Check zoom focus - pinch-to-zoom zooms toward pinch center
- Test limits - zooming beyond min/max stops at the limit
- Observe status - zoom level and camera state update in real-time
- 2.0 - World view
- 10.0 - Country/state view
- 14.0 - City view (default)
- 17.0 - Street view
- 19.0 - Maximum detail (building level)
OpenMapView uses:
ScaleGestureDetectorfor pinch-to-zoom- Fractional zoom (Float) for smooth transitions
- Web Mercator projection for tile calculation
Default Center: Bochum, Germany (51.4661N, 7.2491E) at zoom 14.0
