double tap scale is back

This commit is contained in:
Hannes Janetzek 2014-02-12 02:11:50 +01:00
parent 8d350238cf
commit 424f44ba12
2 changed files with 34 additions and 12 deletions

View File

@ -33,6 +33,7 @@ import android.content.Context;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.view.GestureDetector;
import android.view.GestureDetector.OnDoubleTapListener;
import android.view.GestureDetector.OnGestureListener;
import android.view.MotionEvent;
import android.widget.RelativeLayout;
@ -140,6 +141,23 @@ public class MapView extends RelativeLayout {
return mMap.handleGesture(Gesture.PRESS, mMotionEvent.wrap(e));
}
});
mGestureDetector.setOnDoubleTapListener(new OnDoubleTapListener() {
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
return false;
}
@Override
public boolean onDoubleTapEvent(MotionEvent e) {
return false;
}
@Override
public boolean onDoubleTap(MotionEvent e) {
return mMap.handleGesture(Gesture.DOUBLE_TAP, mMotionEvent.wrap(e));
}
});
}
public Map getMap() {

View File

@ -28,21 +28,24 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Changes Viewport for move, fling, scale, rotation and tilt gestures.
* Changes Viewport by handling move, fling, scale, rotation and tilt gestures.
*/
public class MapEventLayer extends Layer implements Map.InputListener, GestureListener {
static final Logger log = LoggerFactory.getLogger(MapEventLayer.class);
/* TODO replace with bitmasks */
private boolean mEnableRotate = true;
private boolean mEnableTilt = true;
private boolean mEnableMove = true;
private boolean mEnableScale = true;
/* possible state transitions */
private boolean mCanScale;
private boolean mCanRotate;
private boolean mCanTilt;
/* current gesture state */
private boolean mDoRotate;
private boolean mDoScale;
private boolean mDoTilt;
@ -185,8 +188,8 @@ public class MapEventLayer extends Layer implements Map.InputListener, GestureLi
/* double-tap + hold */
if (mDoubleTap) {
mViewport.scaleMap(1 - my / (height / 8), 0, 0);
// FIXME limit scale properly
mViewport.scaleMap(1 - my / (height / 6), 0, 0);
mMap.updateMap(true);
mStartMove = -1;
return true;
@ -275,7 +278,7 @@ public class MapEventLayer extends Layer implements Map.InputListener, GestureLi
}
}
} else if (mDoScale && mEnableRotate) {
/* reenable rotation when higher threshold is reached */
/* re-enable rotation when higher threshold is reached */
double rad = Math.atan2(dy, dx);
double r = rad - mAngle;
@ -290,7 +293,7 @@ public class MapEventLayer extends Layer implements Map.InputListener, GestureLi
if (mCanScale || mDoRotate) {
if (!(mDoScale || mDoRotate)) {
/* enter exclusice scale mode */
/* enter exclusive scale mode */
if (Math.abs(deltaPinch) > (CanvasAdapter.dpi
/ MIN_SLOP * PINCH_ZOOM_THRESHOLD)) {
@ -373,25 +376,26 @@ public class MapEventLayer extends Layer implements Map.InputListener, GestureLi
int h = Tile.SIZE * 3;
mMap.animator().animateFling(Math.round(velocityX),
Math.round(velocityY),
-w, w, -h, h);
Math.round(velocityY),
-w, w, -h, h);
return true;
}
@Override
public boolean onGesture(Gesture g, MotionEvent e) {
if (g instanceof Gesture.DoubleTap) {
//mMapPosition.animateZoom(2);
// avoid onLongPress
// mMap.getLayers().cancelGesture();
if (g == Gesture.DOUBLE_TAP) {
mDoubleTap = true;
mDown = true;
return true;
}
return false;
}
/*******************************************************************************
* Copyright 2011 See libgdx AUTHORS file.
* from libgdx:
* Copyright 2011 Mario Zechner <badlogicgames@gmail.com>
* Copyright 2011 Nathan Sweet <nathan.sweet@gmail.com>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at