summaryrefslogtreecommitdiff
path: root/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java
diff options
context:
space:
mode:
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.java70
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();
}
}