From 36c3fb640da373b6243cc5bda71ca21e2d6764ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Paczos?= Date: Tue, 19 Jun 2018 15:52:31 +0200 Subject: [android] - dispatch camera start callback only when actually moving --- .../mapbox/mapboxsdk/maps/MapGestureDetector.java | 28 ++++++++++------------ 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapGestureDetector.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapGestureDetector.java index 896f655bbc..6cb09f2195 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapGestureDetector.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapGestureDetector.java @@ -438,25 +438,24 @@ final class MapGestureDetector { } transform.cancelTransitions(); - cameraChangeDispatcher.onCameraMoveStarted(REASON_API_GESTURE); - sendTelemetryEvent(Telemetry.PAN, detector.getFocalPoint()); - notifyOnMoveBeginListeners(detector); - return true; } @Override public boolean onMove(MoveGestureDetector detector, float distanceX, float distanceY) { - // dispatching start even once more if another detector ended, and this one didn't - cameraChangeDispatcher.onCameraMoveStarted(CameraChangeDispatcher.REASON_API_GESTURE); + // first move event is often delivered with no displacement + if (distanceX != 0 || distanceY != 0) { + // dispatching camera start event only when the movement actually occurred + cameraChangeDispatcher.onCameraMoveStarted(CameraChangeDispatcher.REASON_API_GESTURE); - // Scroll the map - transform.moveBy(-distanceX, -distanceY, 0 /*no duration*/); + // Scroll the map + transform.moveBy(-distanceX, -distanceY, 0 /*no duration*/); - notifyOnScrollListeners(); - notifyOnMoveListeners(detector); + notifyOnScrollListeners(); + notifyOnMoveListeners(detector); + } return true; } @@ -485,7 +484,6 @@ final class MapGestureDetector { } transform.cancelTransitions(); - cameraChangeDispatcher.onCameraMoveStarted(REASON_API_GESTURE); quickZoom = detector.getPointersCount() == 1; if (quickZoom) { @@ -514,7 +512,7 @@ final class MapGestureDetector { @Override public boolean onScale(StandardScaleGestureDetector detector) { - // dispatching start even once more if another detector ended, and this one didn't + // dispatching camera start event only when the movement actually occurred cameraChangeDispatcher.onCameraMoveStarted(CameraChangeDispatcher.REASON_API_GESTURE); setScaleFocalPoint(detector); @@ -615,7 +613,6 @@ final class MapGestureDetector { } transform.cancelTransitions(); - cameraChangeDispatcher.onCameraMoveStarted(REASON_API_GESTURE); if (uiSettings.isIncreaseScaleThresholdWhenRotating()) { // when rotation starts, interrupting scale and increasing the threshold @@ -637,7 +634,7 @@ final class MapGestureDetector { @Override public boolean onRotate(RotateGestureDetector detector, float rotationDegreesSinceLast, float rotationDegreesSinceFirst) { - // dispatching start even once more if another detector ended, and this one didn't + // dispatching camera start event only when the movement actually occurred cameraChangeDispatcher.onCameraMoveStarted(CameraChangeDispatcher.REASON_API_GESTURE); setRotateFocalPoint(detector); @@ -743,7 +740,6 @@ final class MapGestureDetector { } transform.cancelTransitions(); - cameraChangeDispatcher.onCameraMoveStarted(REASON_API_GESTURE); sendTelemetryEvent(Telemetry.PITCH, detector.getFocalPoint()); @@ -757,7 +753,7 @@ final class MapGestureDetector { @Override public boolean onShove(ShoveGestureDetector detector, float deltaPixelsSinceLast, float deltaPixelsSinceStart) { - // dispatching start even once more if another detector ended, and this one didn't + // dispatching camera start event only when the movement actually occurred cameraChangeDispatcher.onCameraMoveStarted(CameraChangeDispatcher.REASON_API_GESTURE); // Get tilt value (scale and clamp) -- cgit v1.2.1