summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorŁukasz Paczos <lukas.paczos@gmail.com>2019-07-12 15:29:30 +0200
committerŁukasz Paczos <lukasz.paczos@mapbox.com>2019-08-15 18:08:29 +0300
commit18971395d67d5014f571035382762f51be6ff2fb (patch)
tree37f4e455218ea6bf2a936f2ec18e5f2cd9641918
parent09fd9dace6918630a3d961841105d78be8f55445 (diff)
downloadqtlocation-mapboxgl-18971395d67d5014f571035382762f51be6ff2fb.tar.gz
[android] improve scale inertia
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/constants/MapboxConstants.java10
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapGestureDetector.java9
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/res/values/dimens.xml2
3 files changed, 18 insertions, 3 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/constants/MapboxConstants.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/constants/MapboxConstants.java
index d490fd3900..e9fc9e2e02 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/constants/MapboxConstants.java
+++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/constants/MapboxConstants.java
@@ -79,6 +79,16 @@ public class MapboxConstants {
public static final float ROTATION_THRESHOLD_INCREASE_WHEN_SCALING = 25f;
/**
+ * Maximum absolute zoom change for multi-pointer scale velocity animation
+ */
+ public static final double MAX_ABSOLUTE_SCALE_VELOCITY_CHANGE = 2.5;
+
+ /**
+ * Scale velocity animation duration multiplier.
+ */
+ public static final double SCALE_VELOCITY_ANIMATION_DURATION_MULTIPLIER = 150;
+
+ /**
* Time within which user needs to lift fingers for velocity animation to start.
*/
public static final long SCHEDULED_ANIMATION_TIMEOUT = 150L;
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 74a864a6a1..77d59e1690 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
@@ -30,6 +30,8 @@ import java.util.List;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArrayList;
+import static com.mapbox.mapboxsdk.constants.MapboxConstants.MAX_ABSOLUTE_SCALE_VELOCITY_CHANGE;
+import static com.mapbox.mapboxsdk.constants.MapboxConstants.SCALE_VELOCITY_ANIMATION_DURATION_MULTIPLIER;
import static com.mapbox.mapboxsdk.constants.MapboxConstants.ZOOM_RATE;
import static com.mapbox.mapboxsdk.maps.MapboxMap.OnCameraMoveStartedListener.REASON_API_GESTURE;
@@ -558,7 +560,9 @@ final class MapGestureDetector {
double zoomAddition = calculateScale(velocityXY, detector.isScalingOut());
double currentZoom = transform.getRawZoom();
PointF focalPoint = getScaleFocalPoint(detector);
- long animationTime = (long) (Math.abs(zoomAddition) * 1000 / 4);
+ // (log(x + 1 / e^2) + 2) * 150, x=0 to 2.5 (MapboxConstants#MAX_ABSOLUTE_SCALE_VELOCITY_CHANGE)
+ long animationTime = (long) ((Math.log((Math.abs(zoomAddition)) + 1 / Math.pow(Math.E, 2)) + 2)
+ * SCALE_VELOCITY_ANIMATION_DURATION_MULTIPLIER);
scaleAnimator = createScaleAnimator(currentZoom, zoomAddition, focalPoint, animationTime);
scheduleAnimator(scaleAnimator);
}
@@ -578,7 +582,8 @@ final class MapGestureDetector {
}
private double calculateScale(double velocityXY, boolean isScalingOut) {
- double zoomAddition = (float) Math.log(velocityXY / 1000 + 1);
+ double zoomAddition = velocityXY * MAX_ABSOLUTE_SCALE_VELOCITY_CHANGE * 1e-4;
+ zoomAddition = MathUtils.clamp(zoomAddition, 0, MAX_ABSOLUTE_SCALE_VELOCITY_CHANGE);
if (isScalingOut) {
zoomAddition = -zoomAddition;
}
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/res/values/dimens.xml b/platform/android/MapboxGLAndroidSDK/src/main/res/values/dimens.xml
index d2428d8d8f..161a9634d2 100644
--- a/platform/android/MapboxGLAndroidSDK/src/main/res/values/dimens.xml
+++ b/platform/android/MapboxGLAndroidSDK/src/main/res/values/dimens.xml
@@ -8,7 +8,7 @@
<dimen name="mapbox_my_locationview_outer_circle">18dp</dimen>
<!--Minimum scale velocity required to start animation-->
- <dimen name="mapbox_minimum_scale_velocity">150dp</dimen>
+ <dimen name="mapbox_minimum_scale_velocity">225dp</dimen>
<!--Minimum scale span delta required to execute scale gesture when rotating-->
<dimen name="mapbox_minimum_scale_span_when_rotating">100dp</dimen>