diff options
author | Tobrun <tobrun.van.nuland@gmail.com> | 2017-01-12 21:25:40 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-01-12 21:25:40 +0100 |
commit | 831bb21dc84b39c32a5339b3142b28c92208a64a (patch) | |
tree | 7cda552495c13aca4f45f677f221448a7cb22b06 /platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapGestureDetector.java | |
parent | a47600a41dff5e39b070ed40c185a283756306be (diff) | |
download | qtlocation-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.java | 27 |
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) { |