diff options
| author | cachapa <cachapa@cachapa-laptop> | 2011-09-05 21:26:21 +0200 |
|---|---|---|
| committer | cachapa <cachapa@cachapa-laptop> | 2011-09-05 21:26:21 +0200 |
| commit | 968ef45b3d7a2b05a50b28020269fedd704e883a (patch) | |
| tree | d69a9d6335a12f33c8e3b97068dd3f3cce4b9bdc /src | |
| parent | f3c39234c6b9d0eb19be699aa0e41a9f44c25f96 (diff) | |
| download | cgeo-968ef45b3d7a2b05a50b28020269fedd704e883a.zip cgeo-968ef45b3d7a2b05a50b28020269fedd704e883a.tar.gz cgeo-968ef45b3d7a2b05a50b28020269fedd704e883a.tar.bz2 | |
Fixes issue #328
Releases automatic position tracking when the map is manually dragged by the user
Diffstat (limited to 'src')
| -rw-r--r-- | src/cgeo/geocaching/googlemaps/googleMapView.java | 18 | ||||
| -rw-r--r-- | src/cgeo/geocaching/mapcommon/cgeomap.java | 19 | ||||
| -rw-r--r-- | src/cgeo/geocaching/mapinterfaces/MapViewImpl.java | 1 | ||||
| -rw-r--r-- | src/cgeo/geocaching/mapinterfaces/OnDragListener.java | 12 | ||||
| -rw-r--r-- | src/cgeo/geocaching/mapsforge/mfMapView.java | 28 |
5 files changed, 72 insertions, 6 deletions
diff --git a/src/cgeo/geocaching/googlemaps/googleMapView.java b/src/cgeo/geocaching/googlemaps/googleMapView.java index 8a06edb..1ca2d8e 100644 --- a/src/cgeo/geocaching/googlemaps/googleMapView.java +++ b/src/cgeo/geocaching/googlemaps/googleMapView.java @@ -18,6 +18,7 @@ import cgeo.geocaching.mapinterfaces.GeoPointImpl; import cgeo.geocaching.mapinterfaces.MapControllerImpl; import cgeo.geocaching.mapinterfaces.MapProjectionImpl; import cgeo.geocaching.mapinterfaces.MapViewImpl; +import cgeo.geocaching.mapinterfaces.OnDragListener; import cgeo.geocaching.mapinterfaces.OverlayBase; import cgeo.geocaching.mapinterfaces.OverlayImpl; import cgeo.geocaching.mapinterfaces.OverlayImpl.overlayType; @@ -26,8 +27,9 @@ import com.google.android.maps.GeoPoint; import com.google.android.maps.MapView; import com.google.android.maps.Overlay; -public class googleMapView extends MapView implements MapViewImpl{ +public class googleMapView extends MapView implements MapViewImpl { private GestureDetector gestureDetector; + private OnDragListener onDragListener; public googleMapView(Context context, AttributeSet attrs) { super(context, attrs); @@ -159,6 +161,11 @@ public class googleMapView extends MapView implements MapViewImpl{ } @Override + public void setOnDragListener(OnDragListener onDragListener) { + this.onDragListener = onDragListener; + } + + @Override public boolean onTouchEvent(MotionEvent ev) { gestureDetector.onTouchEvent(ev); return super.onTouchEvent(ev); @@ -170,5 +177,14 @@ public class googleMapView extends MapView implements MapViewImpl{ getController().zoomInFixing((int) e.getX(), (int) e.getY()); return true; } + + @Override + public boolean onScroll(MotionEvent e1, MotionEvent e2, + float distanceX, float distanceY) { + if (onDragListener != null) { + onDragListener.onDrag(); + } + return super.onScroll(e1, e2, distanceX, distanceY); + } } } diff --git a/src/cgeo/geocaching/mapcommon/cgeomap.java b/src/cgeo/geocaching/mapcommon/cgeomap.java index 7d7d51e..4d595ed 100644 --- a/src/cgeo/geocaching/mapcommon/cgeomap.java +++ b/src/cgeo/geocaching/mapcommon/cgeomap.java @@ -29,23 +29,23 @@ import cgeo.geocaching.cgCoord; import cgeo.geocaching.cgDirection; import cgeo.geocaching.cgGeo; import cgeo.geocaching.cgSettings; -import cgeo.geocaching.cgSettings.mapSourceEnum; import cgeo.geocaching.cgUpdateDir; import cgeo.geocaching.cgUpdateLoc; import cgeo.geocaching.cgUser; import cgeo.geocaching.cgWaypoint; import cgeo.geocaching.cgeoapplication; import cgeo.geocaching.activity.ActivityMixin; +import cgeo.geocaching.cgSettings.mapSourceEnum; import cgeo.geocaching.mapinterfaces.ActivityImpl; import cgeo.geocaching.mapinterfaces.CacheOverlayItemImpl; import cgeo.geocaching.mapinterfaces.GeoPointImpl; import cgeo.geocaching.mapinterfaces.MapControllerImpl; import cgeo.geocaching.mapinterfaces.MapFactory; import cgeo.geocaching.mapinterfaces.MapViewImpl; +import cgeo.geocaching.mapinterfaces.OnDragListener; import cgeo.geocaching.mapinterfaces.UserOverlayItemImpl; -import cgeo.geocaching.utils.CollectionUtils; -public class cgeomap extends MapBase { +public class cgeomap extends MapBase implements OnDragListener { private static final int MENU_SELECT_MAPVIEW = 1; private static final int MENU_MAP_LIVE = 2; @@ -265,6 +265,7 @@ public class cgeomap extends MapBase { mapView.setBuiltInZoomControls(true); mapView.displayZoomControls(true); mapView.preLoad(); + mapView.setOnDragListener(this); // initialize overlays mapView.clearOverlays(); @@ -506,7 +507,7 @@ public class cgeomap extends MapBase { } item = menu.findItem(MENU_STORE_CACHES); // store loaded - if (live && !isLoading() && app.getNotOfflineCount(searchId) > 0 && CollectionUtils.isNotEmpty(caches)) { + if (live && !isLoading() && app.getNotOfflineCount(searchId) > 0 && caches != null && caches.size() > 0) { item.setEnabled(true); } else { item.setEnabled(false); @@ -563,7 +564,7 @@ public class cgeomap extends MapBase { ArrayList<cgCache> cachesProtected = new ArrayList<cgCache>(caches); try { - if (CollectionUtils.isNotEmpty(cachesProtected)) { + if (cachesProtected.size() > 0) { final GeoPointImpl mapCenter = mapView.getMapViewCenter(); final int mapCenterLat = mapCenter.getLatitudeE6(); final int mapCenterLon = mapCenter.getLongitudeE6(); @@ -1763,6 +1764,14 @@ public class cgeomap extends MapBase { } } + @Override + public void onDrag() { + if (followMyLocation) { + followMyLocation = false; + myLocSwitch.setImageResource(R.drawable.actionbar_mylocation_off); + } + } + // make geopoint private GeoPointImpl makeGeoPoint(Double latitude, Double longitude) { return settings.getMapFactory().getGeoPointBase((int) (latitude * 1e6), (int) (longitude * 1e6)); diff --git a/src/cgeo/geocaching/mapinterfaces/MapViewImpl.java b/src/cgeo/geocaching/mapinterfaces/MapViewImpl.java index 8e99b3d..4c23f63 100644 --- a/src/cgeo/geocaching/mapinterfaces/MapViewImpl.java +++ b/src/cgeo/geocaching/mapinterfaces/MapViewImpl.java @@ -66,4 +66,5 @@ public interface MapViewImpl { void repaintRequired(OverlayBase overlay); + void setOnDragListener(OnDragListener onDragListener); } diff --git a/src/cgeo/geocaching/mapinterfaces/OnDragListener.java b/src/cgeo/geocaching/mapinterfaces/OnDragListener.java new file mode 100644 index 0000000..ebeb13f --- /dev/null +++ b/src/cgeo/geocaching/mapinterfaces/OnDragListener.java @@ -0,0 +1,12 @@ +package cgeo.geocaching.mapinterfaces; + +/** + * Notifies the parent class when a MapView has been dragged + * @author cachapa + * + */ +public interface OnDragListener { + + public void onDrag(); + +} diff --git a/src/cgeo/geocaching/mapsforge/mfMapView.java b/src/cgeo/geocaching/mapsforge/mfMapView.java index 1e83f33..144a650 100644 --- a/src/cgeo/geocaching/mapsforge/mfMapView.java +++ b/src/cgeo/geocaching/mapsforge/mfMapView.java @@ -13,6 +13,9 @@ import android.graphics.Canvas; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.util.Log; +import android.view.GestureDetector; +import android.view.MotionEvent; +import android.view.GestureDetector.SimpleOnGestureListener; import cgeo.geocaching.cgSettings; import cgeo.geocaching.mapcommon.cgMapMyOverlay; import cgeo.geocaching.mapcommon.cgMapOverlay; @@ -22,14 +25,18 @@ import cgeo.geocaching.mapinterfaces.GeoPointImpl; import cgeo.geocaching.mapinterfaces.MapControllerImpl; import cgeo.geocaching.mapinterfaces.MapProjectionImpl; import cgeo.geocaching.mapinterfaces.MapViewImpl; +import cgeo.geocaching.mapinterfaces.OnDragListener; import cgeo.geocaching.mapinterfaces.OverlayBase; import cgeo.geocaching.mapinterfaces.OverlayImpl; import cgeo.geocaching.mapinterfaces.OverlayImpl.overlayType; public class mfMapView extends MapView implements MapViewImpl { + private GestureDetector gestureDetector; + private OnDragListener onDragListener; public mfMapView(Context context, AttributeSet attrs) { super(context, attrs); + gestureDetector = new GestureDetector(context, new GestureListener()); } @Override @@ -205,4 +212,25 @@ public class mfMapView extends MapView implements MapViewImpl { } } + @Override + public void setOnDragListener(OnDragListener onDragListener) { + this.onDragListener = onDragListener; + } + + @Override + public boolean onTouchEvent(MotionEvent ev) { + gestureDetector.onTouchEvent(ev); + return super.onTouchEvent(ev); + } + + private class GestureListener extends SimpleOnGestureListener { + @Override + public boolean onScroll(MotionEvent e1, MotionEvent e2, + float distanceX, float distanceY) { + if (onDragListener != null) { + onDragListener.onDrag(); + } + return super.onScroll(e1, e2, distanceX, distanceY); + } + } } |
