From 424f44ba12440eb0111788852f1500f191d68a04 Mon Sep 17 00:00:00 2001 From: Hannes Janetzek Date: Wed, 12 Feb 2014 02:11:50 +0100 Subject: [PATCH] double tap scale is back --- .../src/org/oscim/android/MapView.java | 18 ++++++++++++ vtm/src/org/oscim/layers/MapEventLayer.java | 28 +++++++++++-------- 2 files changed, 34 insertions(+), 12 deletions(-) diff --git a/vtm-android/src/org/oscim/android/MapView.java b/vtm-android/src/org/oscim/android/MapView.java index fe5b4385..f9c13e1a 100644 --- a/vtm-android/src/org/oscim/android/MapView.java +++ b/vtm-android/src/org/oscim/android/MapView.java @@ -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() { diff --git a/vtm/src/org/oscim/layers/MapEventLayer.java b/vtm/src/org/oscim/layers/MapEventLayer.java index 6b6b600d..639333c6 100644 --- a/vtm/src/org/oscim/layers/MapEventLayer.java +++ b/vtm/src/org/oscim/layers/MapEventLayer.java @@ -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 + * Copyright 2011 Nathan Sweet + * * 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