diff options
author | Tobrun <tobrun@mapbox.com> | 2017-03-17 13:23:53 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-03-17 13:23:53 +0100 |
commit | abeca4fe16f3a8c1fc9149d7cb796113622b89a6 (patch) | |
tree | e535fcaf463708c00964584527f9f89c7a4b25df /platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapView.java | |
parent | 8736b733f9b7262d9a8b3c387c46bba7d0d8247b (diff) | |
download | qtlocation-mapboxgl-abeca4fe16f3a8c1fc9149d7cb796113622b89a6.tar.gz |
[android] - take in account focalpoint when performing transformations, simplify zoom methods (#8416)
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 | 56 |
1 files changed, 53 insertions, 3 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 a2b6fb1f42..51566a6587 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); @@ -939,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); } } } |