diff --git a/base-map/src/main/java/ru/touchin/basemap/AbstractMapManager.kt b/base-map/src/main/java/ru/touchin/basemap/AbstractMapManager.kt index 281b98f..e58f645 100644 --- a/base-map/src/main/java/ru/touchin/basemap/AbstractMapManager.kt +++ b/base-map/src/main/java/ru/touchin/basemap/AbstractMapManager.kt @@ -3,46 +3,79 @@ package ru.touchin.basemap import android.os.Bundle import android.view.View -abstract class AbstractMapManager(protected val mapView: TMapView) { +abstract class AbstractMapManager(protected val mapView: TMapView) { protected lateinit var map: TMap protected var mapListener: AbstractMapListener? = null + abstract fun getCameraTarget(): TLocation + + abstract fun getCameraZoom(): Float + + abstract fun getCameraAzimuth(): Float + + abstract fun getCameraTilt(): Float + + abstract fun moveCamera( + target: TLocation, + zoom: Float = getCameraZoom(), + azimuth: Float = getCameraAzimuth(), + tilt: Float = getCameraTilt() + ) + + abstract fun smoothMoveCamera( + target: TLocation, + zoom: Float = getCameraZoom(), + azimuth: Float = getCameraAzimuth(), + tilt: Float = getCameraTilt() + ) + + abstract fun smoothMoveCamera(targets: List, padding: Int = 0) + + abstract fun smoothMoveCamera(targets: List, width: Int, height: Int, padding: Int) + + abstract fun setMapAllGesturesEnabled(enabled: Boolean) + + abstract fun setMyLocationEnabled(enabled: Boolean) + + abstract fun isLocationInVisibleRegion(location: TLocation): Boolean + open fun initialize(mapListener: AbstractMapListener? = null) { this.mapListener = mapListener } + open fun onCreate(savedInstanceState: Bundle) = Unit + + open fun onDestroy() = Unit + + open fun onStart() = Unit + + open fun onStop() = Unit + + open fun onResume() = Unit + + open fun onPause() = Unit + + open fun onLowMemory() = Unit + + open fun onSaveInstanceState(outState: Bundle) = Unit + protected open fun initMap(map: TMap) { this.map = map this.mapListener?.onMapInitialized(map) } - open fun onCreate(savedInstanceState: Bundle) = Unit - open fun onDestroy() = Unit - open fun onStart() = Unit - open fun onStop() = Unit - open fun onResume() = Unit - open fun onPause() = Unit - open fun onLowMemory() = Unit - open fun onSaveInstanceState (outState: Bundle) = Unit - - abstract fun getCameraTarget(): TLocation - abstract fun getCameraZoom(): Float - abstract fun moveCamera(target: TLocation, zoom: Float = getCameraZoom()) - abstract fun smoothMoveCamera(target: TLocation, zoom: Float = getCameraZoom()) - abstract fun smoothMoveCamera(targets: List, padding: Int = 0) - abstract fun smoothMoveCamera(targets: List, width: Int, height: Int, padding: Int) - abstract fun setMapAllGesturesEnabled(enabled: Boolean) - abstract fun setMyLocationEnabled(enabled: Boolean) - abstract fun isLocationInVisibleRegion(location: TLocation): Boolean - interface AbstractMapListener { fun onMapInitialized(map: TMap) + fun onMapLoaded() = Unit + fun onMapTap(location: TLocation) = Unit + fun onMapLongTap(location: TLocation) = Unit + fun onCameraMoved(finished: Boolean) = Unit } diff --git a/google-map/src/main/java/ru/touchin/googlemap/GoogleMapManager.kt b/google-map/src/main/java/ru/touchin/googlemap/GoogleMapManager.kt index 1745afa..49e1f26 100644 --- a/google-map/src/main/java/ru/touchin/googlemap/GoogleMapManager.kt +++ b/google-map/src/main/java/ru/touchin/googlemap/GoogleMapManager.kt @@ -72,12 +72,16 @@ class GoogleMapManager(mapView: MapView) : AbstractMapManager, padding: Int) { @@ -105,6 +109,13 @@ class GoogleMapManager(mapView: MapView) : AbstractMapManager } diff --git a/yandex-map/src/main/java/ru/touchin/yandexmap/YandexMapManager.kt b/yandex-map/src/main/java/ru/touchin/yandexmap/YandexMapManager.kt index 919c9bf..cdc5d1f 100644 --- a/yandex-map/src/main/java/ru/touchin/yandexmap/YandexMapManager.kt +++ b/yandex-map/src/main/java/ru/touchin/yandexmap/YandexMapManager.kt @@ -21,6 +21,11 @@ class YandexMapManager( private val isDebug: Boolean = false ) : AbstractMapManager(mapView), MapLoadedListener, CameraListener, InputListener { + companion object { + private const val CAMERA_ANIMATION_DURATION = 1f + private const val CAMERA_OFFSET_ZOOM = 3f + } + private val userLocationLayer by lazy { MapKitFactory.getInstance().createUserLocationLayer(mapView.mapWindow).also { it.isVisible = false } } @@ -75,18 +80,22 @@ class YandexMapManager( override fun getCameraZoom(): Float = map.cameraPosition.zoom - override fun moveCamera(target: Point, zoom: Float) { - map.move(CameraPosition(target, zoom, 0.0f, 0.0f), Animation(Animation.Type.LINEAR, 1F), null) + override fun getCameraAzimuth(): Float = map.cameraPosition.azimuth + + override fun getCameraTilt(): Float = map.cameraPosition.tilt + + override fun moveCamera(target: Point, zoom: Float, azimuth: Float, tilt: Float) { + map.move(CameraPosition(target, zoom, azimuth, tilt), Animation(Animation.Type.LINEAR, CAMERA_ANIMATION_DURATION), null) } - override fun smoothMoveCamera(target: Point, zoom: Float) { - map.move(CameraPosition(target, zoom, 0.0f, 0.0f), Animation(Animation.Type.SMOOTH, 1F), null) + override fun smoothMoveCamera(target: Point, zoom: Float, azimuth: Float, tilt: Float) { + map.move(CameraPosition(target, zoom, azimuth, tilt), Animation(Animation.Type.SMOOTH, CAMERA_ANIMATION_DURATION), null) } override fun smoothMoveCamera(targets: List, padding: Int) { val boundingBox = BoundingBoxHelper.getBounds(LinearRing(targets)) val cameraPosition = map.cameraPosition(boundingBox) - smoothMoveCamera(cameraPosition.target, cameraPosition.zoom - 3f) + smoothMoveCamera(cameraPosition.target, cameraPosition.zoom - CAMERA_OFFSET_ZOOM) } override fun smoothMoveCamera(targets: List, width: Int, height: Int, padding: Int) { @@ -94,7 +103,9 @@ class YandexMapManager( } override fun setMapAllGesturesEnabled(enabled: Boolean) { + map.isRotateGesturesEnabled = enabled map.isScrollGesturesEnabled = enabled + map.isTiltGesturesEnabled = enabled map.isZoomGesturesEnabled = enabled }