diff options
Diffstat (limited to 'platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java')
-rw-r--r-- | platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java | 70 |
1 files changed, 62 insertions, 8 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java index 8fa2d0b152..8c8b70d788 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java @@ -31,6 +31,7 @@ import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.FrameLayout; import android.widget.ImageView; +import android.widget.ZoomButtonsController; import com.mapbox.mapboxsdk.Mapbox; import com.mapbox.mapboxsdk.R; @@ -147,7 +148,9 @@ public class MapView extends FrameLayout { // user input mapGestureDetector = new MapGestureDetector(context, transform, proj, uiSettings, trackingSettings, annotations); mapKeyListener = new MapKeyListener(transform, trackingSettings, uiSettings); - mapZoomButtonController = new MapZoomButtonController(this, uiSettings, transform); + + MapZoomControllerListener zoomListener = new MapZoomControllerListener(mapGestureDetector, uiSettings, transform); + mapZoomButtonController = new MapZoomButtonController(this, uiSettings, zoomListener); // inject widgets with MapboxMap compassView.setMapboxMap(mapboxMap); @@ -508,7 +511,7 @@ public class MapView extends FrameLayout { if (destroyed) { return; } - mapboxMap.onUpdate(); + mapboxMap.onUpdateRegionChange(); } } @@ -521,13 +524,15 @@ public class MapView extends FrameLayout { @CallSuper protected void onDetachedFromWindow() { super.onDetachedFromWindow(); - mapZoomButtonController.setVisible(false); + if (mapZoomButtonController != null) { + mapZoomButtonController.setVisible(false); + } } // Called when view is hidden and shown @Override protected void onVisibilityChanged(@NonNull View changedView, int visibility) { - if (isInEditMode()) { + if (isInEditMode() || mapZoomButtonController == null) { return; } mapZoomButtonController.setVisible(visibility == View.VISIBLE); @@ -801,7 +806,7 @@ public class MapView extends FrameLayout { public static final int DID_FINISH_RENDERING_FRAME = 9; /** - * This event is triggered when the map finished rendeirng the frame fully. + * This event is triggered when the map finished rendering the frame fully. * <p> * Register to {@link MapChange} events with {@link MapView#addOnMapChangedListener(OnMapChangedListener)}. * </p> @@ -937,12 +942,59 @@ public class MapView extends FrameLayout { } } + private class MapZoomControllerListener implements ZoomButtonsController.OnZoomListener { + + private final MapGestureDetector mapGestureDetector; + private final UiSettings uiSettings; + private final Transform transform; + + MapZoomControllerListener(MapGestureDetector detector, UiSettings uiSettings, Transform transform) { + this.mapGestureDetector = detector; + this.uiSettings = uiSettings; + this.transform = transform; + } + + // Not used + @Override + public void onVisibilityChanged(boolean visible) { + // Ignore + } + + // Called when user pushes a zoom button on the ZoomButtonController + @Override + public void onZoom(boolean zoomIn) { + if (uiSettings.isZoomGesturesEnabled()) { + onZoom(zoomIn, mapGestureDetector.getFocalPoint()); + } + } + + private void onZoom(boolean zoomIn, @Nullable PointF focalPoint) { + if (focalPoint != null) { + transform.zoom(zoomIn, focalPoint); + } else { + PointF centerPoint = new PointF(getMeasuredWidth() / 2, getMeasuredHeight() / 2); + transform.zoom(zoomIn, centerPoint); + } + } + } + private class CameraZoomInvalidator implements TrackingSettings.CameraZoomInvalidator { + @Override public void zoomTo(double zoomLevel) { - double currentZoomLevel = mapboxMap.getCameraPosition().zoom; + Transform transform = mapboxMap.getTransform(); + double currentZoomLevel = transform.getCameraPosition().zoom; if (currentZoomLevel < zoomLevel) { - mapboxMap.getTransform().setZoom(zoomLevel); + setZoom(zoomLevel, mapGestureDetector.getFocalPoint(), transform); + } + } + + private void setZoom(double zoomLevel, @Nullable PointF focalPoint, @NonNull Transform transform) { + if (focalPoint != null) { + transform.setZoom(zoomLevel, focalPoint); + } else { + PointF centerPoint = new PointF(getMeasuredWidth() / 2, getMeasuredHeight() / 2); + transform.setZoom(zoomLevel, centerPoint); } } } @@ -969,8 +1021,10 @@ public class MapView extends FrameLayout { mapboxMap.onPostMapReady(); } }); + } else if (change == DID_FINISH_RENDERING_FRAME || change == DID_FINISH_RENDERING_FRAME_FULLY_RENDERED) { + mapboxMap.onUpdateFullyRendered(); } else if (change == REGION_IS_CHANGING || change == REGION_DID_CHANGE || change == DID_FINISH_LOADING_MAP) { - mapboxMap.onUpdate(); + mapboxMap.onUpdateRegionChange(); } } |