summaryrefslogtreecommitdiff
path: root/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/maps/MapGestureDetector.java
diff options
context:
space:
mode:
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.java98
1 files changed, 14 insertions, 84 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 84d92e73dc..43fb08972b 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
@@ -10,9 +10,10 @@ import android.os.Handler;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.view.InputDevice;
+import android.view.KeyEvent;
import android.view.MotionEvent;
+import android.view.View;
import android.view.animation.DecelerateInterpolator;
-import android.view.animation.LinearInterpolator;
import com.mapbox.android.gestures.AndroidGesturesManager;
import com.mapbox.android.gestures.MoveGestureDetector;
@@ -44,13 +45,14 @@ import static com.mapbox.mapboxsdk.utils.MathUtils.normalize;
/**
* Manages gestures events on a MapView.
*/
-final class MapGestureDetector {
+final class MapGestureDetector implements View.OnKeyListener {
private final Transform transform;
private final Projection projection;
private final UiSettings uiSettings;
private final AnnotationManager annotationManager;
private final CameraChangeDispatcher cameraChangeDispatcher;
+ private boolean isZHeldDown = false;
// new map touch API
private final CopyOnWriteArrayList<MapboxMap.OnMapClickListener> onMapClickListenerList
@@ -87,7 +89,6 @@ final class MapGestureDetector {
private Animator scaleAnimator;
private Animator rotateAnimator;
- private Animator pitchAnimator;
private final List<Animator> scheduledAnimators = new ArrayList<>();
/**
@@ -106,6 +107,7 @@ final class MapGestureDetector {
this.projection = projection;
this.uiSettings = uiSettings;
this.cameraChangeDispatcher = cameraChangeDispatcher;
+ view.setOnKeyListener(this);
// Checking for context != null for testing purposes
if (context != null) {
@@ -118,6 +120,12 @@ final class MapGestureDetector {
}
}
+ @Override
+ public boolean onKey(View view, int i, KeyEvent keyEvent) {
+ MapGestureDetector.this.isZHeldDown = keyEvent.getKeyCode() == keyEvent.KEYCODE_Z;
+ return false;
+ }
+
private void initializeGestureListeners(@NonNull Context context, boolean attachDefaultListeners) {
if (attachDefaultListeners) {
StandardGestureListener standardGestureListener = new StandardGestureListener(
@@ -253,7 +261,6 @@ final class MapGestureDetector {
cancelAnimator(scaleAnimator);
cancelAnimator(rotateAnimator);
- cancelAnimator(pitchAnimator);
dispatchCameraIdle();
}
@@ -314,16 +321,9 @@ final class MapGestureDetector {
// Get the vertical scroll amount, one click = 1
float scrollDist = event.getAxisValue(MotionEvent.AXIS_VSCROLL);
- // Check whether a keyboard shift key is held down while the scrolling is happening. If so,
- // tilt the map to scroll. More info at
- // https://developer.android.com/reference/android/view/KeyEvent.html#META_SHIFT_ON
- if (event.getMetaState() == 1) {
- transform.setTilt(transform.getTilt() - scrollDist);
- } else {
- // Scale the map by the appropriate power of two factor
- transform.zoomBy(scrollDist, new PointF(event.getX(), event.getY()));
- }
-
+ // Scale the map by the appropriate power of two factor. The map camera target doesn't
+ // change when scrolling in or out.
+ transform.zoomBy(scrollDist, new PointF(uiSettings.getWidth() / 2, uiSettings.getHeight() / 2));
return true;
default:
@@ -891,41 +891,6 @@ final class MapGestureDetector {
}
}
- private Animator createPitchAnimator(double currentPitch, double pitchAddition, long animationTime) {
- ValueAnimator animator = ValueAnimator.ofFloat((float) currentPitch, (float) (currentPitch + pitchAddition));
- animator.setDuration(animationTime);
- animator.setInterpolator(new LinearInterpolator());
- animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
-
- @Override
- public void onAnimationUpdate(@NonNull ValueAnimator animation) {
- Float floatValue = (Float) animation.getAnimatedValue();
- transform.setTilt(floatValue.doubleValue());
- }
- });
-
- animator.addListener(new AnimatorListenerAdapter() {
-
- @Override
- public void onAnimationStart(Animator animation) {
- transform.cancelTransitions();
- cameraChangeDispatcher.onCameraMoveStarted(REASON_API_ANIMATION);
- }
-
- @Override
- public void onAnimationCancel(Animator animation) {
- transform.cancelTransitions();
- }
-
- @Override
- public void onAnimationEnd(Animator animation) {
- dispatchCameraIdle();
- }
- });
- return animator;
- }
-
-
private Animator createScaleAnimator(double currentZoom, double zoomAddition,
@NonNull final PointF animationFocalPoint, long animationTime) {
ValueAnimator animator = ValueAnimator.ofFloat((float) currentZoom, (float) (currentZoom + zoomAddition));
@@ -972,26 +937,6 @@ final class MapGestureDetector {
}
/**
- * Adjust the map camera so that the map's plane is tilted up.
- *
- * @param runImmediately if true, animation will be started right away, otherwise it will wait until
- * {@link MotionEvent#ACTION_UP} is registered.
- */
- void pitchCameraUpAnimated(boolean runImmediately) {
- pitchAnimated(true, runImmediately);
- }
-
- /**
- * Adjust the map camera so that the map's plane is tilted down.
- *
- * @param runImmediately if true, animation will be started right away, otherwise it will wait until
- * {@link MotionEvent#ACTION_UP} is registered.
- */
- void pitchCameraDownAnimated(boolean runImmediately) {
- pitchAnimated(false, runImmediately);
- }
-
- /**
* Zoom out by 1.
*
* @param zoomFocalPoint focal point of zoom animation
@@ -1019,21 +964,6 @@ final class MapGestureDetector {
}
}
- private void pitchAnimated(boolean pitchUp, boolean runImmediately) {
- //canceling here as well, because when using a button it will not be canceled automatically by onDown()
- cancelAnimator(pitchAnimator);
-
- pitchAnimator = createPitchAnimator(
- transform.getTilt(),
- pitchUp ? -5 : 5,
- MapboxConstants.ANIMATION_DURATION);
- if (runImmediately) {
- pitchAnimator.start();
- } else {
- scheduleAnimator(pitchAnimator);
- }
- }
-
private void dispatchCameraIdle() {
// we need to dispatch camera idle callback only if there is no other gestures in progress
if (noGesturesInProgress()) {