summaryrefslogtreecommitdiff
path: root/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapGestureDetector.java
diff options
context:
space:
mode:
authorTobrun <tobrun.van.nuland@gmail.com>2017-01-12 21:25:40 +0100
committerGitHub <noreply@github.com>2017-01-12 21:25:40 +0100
commit831bb21dc84b39c32a5339b3142b28c92208a64a (patch)
tree7cda552495c13aca4f45f677f221448a7cb22b06 /platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapGestureDetector.java
parenta47600a41dff5e39b070ed40c185a283756306be (diff)
downloadqtlocation-mapboxgl-831bb21dc84b39c32a5339b3142b28c92208a64a.tar.gz
[android] - improve fling gesture by calculating animation time from velocity, ignore small fling gestures. (#7676)
Diffstat (limited to 'platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapGestureDetector.java')
-rw-r--r--platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapGestureDetector.java27
1 files changed, 19 insertions, 8 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 bf7c1918e2..11dee078ac 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
@@ -302,21 +302,32 @@ final class MapGestureDetector {
return false;
}
+ float screenDensity = uiSettings.getPixelRatio();
+
+ // calculate velocity vector for xy dimensions, independent from screen size
+ double velocityXY = Math.hypot(velocityX / screenDensity, velocityY / screenDensity);
+ if (velocityXY < MapboxConstants.VELOCITY_THRESHOLD_IGNORE_FLING) {
+ // ignore short flings, these can occur when other gestures just have finished executing
+ return false;
+ }
+
trackingSettings.resetTrackingModesIfRequired(true, false);
- // Cancel any animation
+ // cancel any animation
transform.cancelTransitions();
- float screenDensity = uiSettings.getPixelRatio();
-
+ // tilt results in a bigger translation, limiting input for #5281
double tilt = transform.getTilt();
- // tilt results in a bigger translation, need to limit input #5281, limitFactor ranges from 2 -> 8
- double limitFactor = 2 + ((tilt != 0) ? (tilt / 10) : 0);
- double offsetX = velocityX / limitFactor / screenDensity;
- double offsetY = velocityY / limitFactor / screenDensity;
+ double tiltFactor = 1 + ((tilt != 0) ? (tilt / 10) : 0); /* 1 -> 7 */
+ double offsetX = velocityX / tiltFactor / screenDensity;
+ double offsetY = velocityY / tiltFactor / screenDensity;
+
+ // calculate animation time based on displacement
+ long animationTime = (long) (velocityXY / 7 / tiltFactor + MapboxConstants.ANIMATION_DURATION_FLING_BASE);
+ // update transformation
transform.setGestureInProgress(true);
- transform.moveBy(offsetX, offsetY, MapboxConstants.ANIMATION_DURATION_FLING);
+ transform.moveBy(offsetX, offsetY, animationTime);
transform.setGestureInProgress(false);
if (onFlingListener != null) {