diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/almeros/android/multitouch/gesturedetectors/TwoFingerGestureDetector.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/almeros/android/multitouch/gesturedetectors/TwoFingerGestureDetector.java index db492b65560..3d28c2295d1 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/almeros/android/multitouch/gesturedetectors/TwoFingerGestureDetector.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/almeros/android/multitouch/gesturedetectors/TwoFingerGestureDetector.java @@ -54,7 +54,9 @@ public TwoFingerGestureDetector(Context context) { ViewConfiguration config = ViewConfiguration.get(context); - edgeSlop = config.getScaledEdgeSlop(); + // lowering the edgeSlop allows to execute gesture faster + // https://github.com/mapbox/mapbox-gl-native/issues/10102 + edgeSlop = config.getScaledEdgeSlop() / 3.0f; } @Override 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 2394e521936..f309570a7b9 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 @@ -526,10 +526,10 @@ public boolean onScale(ScaleGestureDetector detector) { */ private class RotateGestureListener extends RotateGestureDetector.SimpleOnRotateGestureListener { - private static final long ROTATE_INVOKE_WAIT_TIME = 1500; + private static final long ROTATE_INVOKE_WAIT_TIME = 750; + private static final float ROTATE_INVOKE_ANGLE = 17.5f; private long beginTime = 0; - private float totalAngle = 0.0f; private boolean started = false; // Called when two fingers first touch the screen @@ -551,7 +551,6 @@ public boolean onRotateBegin(RotateGestureDetector detector) { public void onRotateEnd(RotateGestureDetector detector) { // notify camera change listener beginTime = 0; - totalAngle = 0.0f; started = false; } @@ -573,8 +572,8 @@ public boolean onRotate(RotateGestureDetector detector) { // If rotate is large enough ignore a tap // Also is zoom already started, don't rotate - totalAngle += detector.getRotationDegreesDelta(); - if (totalAngle > 35.0f || totalAngle < -35.0f) { + float angle = detector.getRotationDegreesDelta(); + if (Math.abs(angle) >= ROTATE_INVOKE_ANGLE) { MapboxTelemetry.getInstance().pushEvent(MapboxEventWrapper.buildMapClickEvent( getLocationFromGesture(detector.getFocusX(), detector.getFocusY()), MapboxEvent.GESTURE_ROTATION_START, transform)); @@ -589,9 +588,8 @@ public boolean onRotate(RotateGestureDetector detector) { // rotation, so cancel both location and bearing tracking if required trackingSettings.resetTrackingModesIfRequired(true, true, false); - // Get rotate value - double bearing = transform.getRawBearing(); - bearing += detector.getRotationDegreesDelta(); + // Calculate map bearing value + double bearing = transform.getRawBearing() + angle; // Rotate the map if (focalPoint != null) { 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 12e4c675ee1..a93d05eaed3 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 @@ -382,6 +382,10 @@ public void onDestroy() { @Override public boolean onTouchEvent(MotionEvent event) { + if (!isMapInitialized()) { + return super.onTouchEvent(event); + } + if (event.getAction() == MotionEvent.ACTION_DOWN) { mapZoomButtonController.setVisible(true); } @@ -471,7 +475,7 @@ public void setStyleUrl(@NonNull String url) { if (destroyed) { return; } - if (nativeMapView == null) { + if (!isMapInitialized()) { mapboxMapOptions.styleUrl(url); return; } @@ -488,7 +492,7 @@ protected void onSizeChanged(int width, int height, int oldw, int oldh) { return; } - if (!isInEditMode() && nativeMapView != null) { + if (!isInEditMode() && isMapInitialized()) { nativeMapView.resizeView(width, height); } } @@ -574,6 +578,10 @@ public void getMapAsync(final OnMapReadyCallback callback) { } } + private boolean isMapInitialized() { + return nativeMapView != null; + } + MapboxMap getMapboxMap() { return mapboxMap; }