diff options
Diffstat (limited to 'src/cgeo/geocaching/mapsforge/mfMapView.java')
| -rw-r--r-- | src/cgeo/geocaching/mapsforge/mfMapView.java | 449 |
1 files changed, 225 insertions, 224 deletions
diff --git a/src/cgeo/geocaching/mapsforge/mfMapView.java b/src/cgeo/geocaching/mapsforge/mfMapView.java index 19e3b8d..a4d1e40 100644 --- a/src/cgeo/geocaching/mapsforge/mfMapView.java +++ b/src/cgeo/geocaching/mapsforge/mfMapView.java @@ -1,5 +1,19 @@ package cgeo.geocaching.mapsforge; +import cgeo.geocaching.cgSettings; +import cgeo.geocaching.mapcommon.cgMapMyOverlay; +import cgeo.geocaching.mapcommon.cgMapOverlay; +import cgeo.geocaching.mapcommon.cgOverlayScale; +import cgeo.geocaching.mapcommon.cgUsersOverlay; +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; + import org.mapsforge.android.maps.GeoPoint; import org.mapsforge.android.maps.MapDatabase; import org.mapsforge.android.maps.MapView; @@ -14,231 +28,218 @@ 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; -import cgeo.geocaching.mapcommon.cgOverlayScale; -import cgeo.geocaching.mapcommon.cgUsersOverlay; -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; +import android.view.MotionEvent; 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 - public void draw(Canvas canvas) { - try { - if (getMapZoomLevel() >= 22) { // to avoid too close zoom level (mostly on Samsung Galaxy S series) - getController().setZoom(22); - } - - super.draw(canvas); - } catch (Exception e) { - Log.e(cgSettings.tag, "cgMapView.draw: " + e.toString()); - } - } - - @Override - public void displayZoomControls(boolean takeFocus) { - // nothing to do here - } - - @Override - public MapControllerImpl getMapController() { - return new mfMapController(getController(), getMaxZoomLevel()); - } - - @Override - public GeoPointImpl getMapViewCenter() { - GeoPoint point = getMapCenter(); - return new mfGeoPoint(point.getLatitudeE6(), point.getLongitudeE6()); - } - - @Override - public void addOverlay(OverlayImpl ovl) { - getOverlays().add((Overlay)ovl); - } - - @Override - public void clearOverlays() { - getOverlays().clear(); - } - - @Override - public MapProjectionImpl getMapProjection() { - return new mfMapProjection(getProjection()); - } - - @Override - public cgMapOverlay createAddMapOverlay(cgSettings settings, - Context context, Drawable drawable, boolean fromDetailIntent) { - - mfCacheOverlay ovl = new mfCacheOverlay(settings, context, drawable, fromDetailIntent); - getOverlays().add(ovl); - return ovl.getBase(); - } - - @Override - public cgUsersOverlay createAddUsersOverlay(Context context, Drawable markerIn) { - mfUsersOverlay ovl = new mfUsersOverlay(context, markerIn); - getOverlays().add(ovl); - return ovl.getBase(); - } - - @Override - public cgMapMyOverlay createAddPositionOverlay(Activity activity, - cgSettings settingsIn) { - mfOverlay ovl = new mfOverlay(activity, settingsIn, overlayType.PositionOverlay); - getOverlays().add(ovl); - return (cgMapMyOverlay) ovl.getBase(); - } - - @Override - public cgOverlayScale createAddScaleOverlay(Activity activity, - cgSettings settingsIn) { - mfOverlay ovl = new mfOverlay(activity, settingsIn, overlayType.ScaleOverlay); - getOverlays().add(ovl); - return (cgOverlayScale) ovl.getBase(); - } - - @Override - public int getLatitudeSpan() { - - int span = 0; - - Projection projection = getProjection(); - - if (projection != null && getHeight() > 0) { - - GeoPoint low = projection.fromPixels(0, 0); - GeoPoint high = projection.fromPixels(0, getHeight()); - - if (low != null && high != null) { - span = Math.abs(high.getLatitudeE6() - low.getLatitudeE6()); - } - } - - return span; - } - - @Override - public int getLongitudeSpan() { - - int span = 0; - - Projection projection = getProjection(); - - if (projection != null && getWidth() > 0) { - GeoPoint low = projection.fromPixels(0, 0); - GeoPoint high = projection.fromPixels(getWidth(), 0); - - if (low != null && high != null) { - span = Math.abs(high.getLongitudeE6() - low.getLongitudeE6()); - } - } - - return span; - } - - @Override - public void preLoad() { - // Nothing to do here - } - - @Override - public int getMapZoomLevel() { - return getZoomLevel()+1; - } - - @Override - public boolean needsScaleOverlay() { - return false; - } - - @Override - public void setBuiltinScale(boolean b) { - setScaleBar(b); - } - - @Override - public void setMapSource(cgSettings settings) { - - switch(settings.mapSource) { - case mapsforgeOsmarender: - setMapViewMode(MapViewMode.OSMARENDER_TILE_DOWNLOAD); - break; - case mapsforgeCycle: - setMapViewMode(MapViewMode.OPENCYCLEMAP_TILE_DOWNLOAD); - break; - case mapsforgeOffline: - if (MapDatabase.isValidMapFile(settings.getMapFile())) { - setMapViewMode(MapViewMode.CANVAS_RENDERER); - super.setMapFile(settings.getMapFile()); - } else { - setMapViewMode(MapViewMode.MAPNIK_TILE_DOWNLOAD); - } - break; - default: - setMapViewMode(MapViewMode.MAPNIK_TILE_DOWNLOAD); - } - } - - @Override - public void repaintRequired(OverlayBase overlay) { - - try { - mfOverlay ovl = (mfOverlay) overlay.getOverlayImpl(); - - if (ovl != null) { - ovl.requestRedraw(); - } - - } catch (Exception e) { - Log.e(cgSettings.tag, "mfMapView.repaintRequired: " + e.toString()); - } - } - - @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 onDoubleTap(MotionEvent e) { - if (onDragListener != null) { - onDragListener.onDrag(); - } - 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); - } - } + private GestureDetector gestureDetector; + private OnDragListener onDragListener; + + public mfMapView(Context context, AttributeSet attrs) { + super(context, attrs); + gestureDetector = new GestureDetector(context, new GestureListener()); + } + + @Override + public void draw(Canvas canvas) { + try { + if (getMapZoomLevel() >= 22) { // to avoid too close zoom level (mostly on Samsung Galaxy S series) + getController().setZoom(22); + } + + super.draw(canvas); + } catch (Exception e) { + Log.e(cgSettings.tag, "cgMapView.draw: " + e.toString()); + } + } + + @Override + public void displayZoomControls(boolean takeFocus) { + // nothing to do here + } + + @Override + public MapControllerImpl getMapController() { + return new mfMapController(getController(), getMaxZoomLevel()); + } + + @Override + public GeoPointImpl getMapViewCenter() { + GeoPoint point = getMapCenter(); + return new mfGeoPoint(point.getLatitudeE6(), point.getLongitudeE6()); + } + + @Override + public void addOverlay(OverlayImpl ovl) { + getOverlays().add((Overlay) ovl); + } + + @Override + public void clearOverlays() { + getOverlays().clear(); + } + + @Override + public MapProjectionImpl getMapProjection() { + return new mfMapProjection(getProjection()); + } + + @Override + public cgMapOverlay createAddMapOverlay(cgSettings settings, + Context context, Drawable drawable, boolean fromDetailIntent) { + + mfCacheOverlay ovl = new mfCacheOverlay(settings, context, drawable, fromDetailIntent); + getOverlays().add(ovl); + return ovl.getBase(); + } + + @Override + public cgUsersOverlay createAddUsersOverlay(Context context, Drawable markerIn) { + mfUsersOverlay ovl = new mfUsersOverlay(context, markerIn); + getOverlays().add(ovl); + return ovl.getBase(); + } + + @Override + public cgMapMyOverlay createAddPositionOverlay(Activity activity, + cgSettings settingsIn) { + mfOverlay ovl = new mfOverlay(activity, settingsIn, overlayType.PositionOverlay); + getOverlays().add(ovl); + return (cgMapMyOverlay) ovl.getBase(); + } + + @Override + public cgOverlayScale createAddScaleOverlay(Activity activity, + cgSettings settingsIn) { + mfOverlay ovl = new mfOverlay(activity, settingsIn, overlayType.ScaleOverlay); + getOverlays().add(ovl); + return (cgOverlayScale) ovl.getBase(); + } + + @Override + public int getLatitudeSpan() { + + int span = 0; + + Projection projection = getProjection(); + + if (projection != null && getHeight() > 0) { + + GeoPoint low = projection.fromPixels(0, 0); + GeoPoint high = projection.fromPixels(0, getHeight()); + + if (low != null && high != null) { + span = Math.abs(high.getLatitudeE6() - low.getLatitudeE6()); + } + } + + return span; + } + + @Override + public int getLongitudeSpan() { + + int span = 0; + + Projection projection = getProjection(); + + if (projection != null && getWidth() > 0) { + GeoPoint low = projection.fromPixels(0, 0); + GeoPoint high = projection.fromPixels(getWidth(), 0); + + if (low != null && high != null) { + span = Math.abs(high.getLongitudeE6() - low.getLongitudeE6()); + } + } + + return span; + } + + @Override + public void preLoad() { + // Nothing to do here + } + + @Override + public int getMapZoomLevel() { + return getZoomLevel() + 1; + } + + @Override + public boolean needsScaleOverlay() { + return false; + } + + @Override + public void setBuiltinScale(boolean b) { + setScaleBar(b); + } + + @Override + public void setMapSource(cgSettings settings) { + + switch (settings.mapSource) { + case mapsforgeOsmarender: + setMapViewMode(MapViewMode.OSMARENDER_TILE_DOWNLOAD); + break; + case mapsforgeCycle: + setMapViewMode(MapViewMode.OPENCYCLEMAP_TILE_DOWNLOAD); + break; + case mapsforgeOffline: + if (MapDatabase.isValidMapFile(settings.getMapFile())) { + setMapViewMode(MapViewMode.CANVAS_RENDERER); + super.setMapFile(settings.getMapFile()); + } else { + setMapViewMode(MapViewMode.MAPNIK_TILE_DOWNLOAD); + } + break; + default: + setMapViewMode(MapViewMode.MAPNIK_TILE_DOWNLOAD); + } + } + + @Override + public void repaintRequired(OverlayBase overlay) { + + try { + mfOverlay ovl = (mfOverlay) overlay.getOverlayImpl(); + + if (ovl != null) { + ovl.requestRedraw(); + } + + } catch (Exception e) { + Log.e(cgSettings.tag, "mfMapView.repaintRequired: " + e.toString()); + } + } + + @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 onDoubleTap(MotionEvent e) { + if (onDragListener != null) { + onDragListener.onDrag(); + } + 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); + } + } } |
