From 4f3560d810a78055b5f0001f2fd49902b2329daf Mon Sep 17 00:00:00 2001 From: Hannes Janetzek Date: Sun, 28 Apr 2013 04:25:25 +0200 Subject: [PATCH] MapEventLayer: take over gesture detection after double tap --- src/org/oscim/view/LayerManager.java | 44 ++++++++++++++++----------- src/org/oscim/view/MapEventLayer.java | 5 ++- 2 files changed, 30 insertions(+), 19 deletions(-) diff --git a/src/org/oscim/view/LayerManager.java b/src/org/oscim/view/LayerManager.java index 8add1dbc..d5b8df54 100644 --- a/src/org/oscim/view/LayerManager.java +++ b/src/org/oscim/view/LayerManager.java @@ -77,24 +77,6 @@ public class LayerManager extends AbstractList implements OnGestureListen return mLayerList.set(pIndex, pElement); } - public boolean handleMotionEvent(MotionEvent e) { - - if (!mCancelGesture) - if (mGestureDetector.onTouchEvent(e)) - return true; - - if (mCancelGesture) { - int action = e.getAction(); - if (action == MotionEvent.ACTION_CANCEL || - action == MotionEvent.ACTION_UP) - mCancelGesture = false; - } - if (onTouchEvent(e)) - return true; - - return false; - } - private boolean mDirtyLayers; private RenderOverlay[] mDrawLayers; @@ -163,6 +145,28 @@ public class LayerManager extends AbstractList implements OnGestureListen private boolean mCancelGesture; + public boolean handleMotionEvent(MotionEvent e) { + boolean handleGesture = true; + + if (mCancelGesture) { + int action = e.getAction(); + handleGesture = (action == MotionEvent.ACTION_CANCEL || + action == MotionEvent.ACTION_UP); + } + + if (handleGesture) { + if (mGestureDetector.onTouchEvent(e)) + return true; + + mCancelGesture = false; + } + + if (onTouchEvent(e)) + return true; + + return false; + } + /** * Call this to not foward events to generic GestureDetector until * next ACTION_UP or ACTION_CANCEL event. - Use with care for the @@ -236,6 +240,7 @@ public class LayerManager extends AbstractList implements OnGestureListen @Override public boolean onDoubleTap(final MotionEvent e) { + if (mDirtyLayers) updateLayers(); @@ -314,6 +319,9 @@ public class LayerManager extends AbstractList implements OnGestureListen @Override public void onLongPress(final MotionEvent pEvent) { + if (mCancelGesture) + return; + if (mDirtyLayers) updateLayers(); diff --git a/src/org/oscim/view/MapEventLayer.java b/src/org/oscim/view/MapEventLayer.java index 71074106..8d482bd5 100644 --- a/src/org/oscim/view/MapEventLayer.java +++ b/src/org/oscim/view/MapEventLayer.java @@ -253,6 +253,9 @@ public class MapEventLayer extends Overlay { if (debug) printState("onDoubleTap"); + // avoid onLongPress + mMapView.getOverlayManager().cancelGesture(); + return true; } @@ -291,7 +294,7 @@ public class MapEventLayer extends Overlay { // float move = Math.min(mMapView.getWidth(), mMapView.getHeight()) * 2 / 3; // mMapPosition.animateTo(vx * move, vy * move, 250); //} else { - float s = (200 / mMapView.dpi); + float s = (200 / MapView.dpi); mMapPosition.animateFling( Math.round(velocityX * s),