diff options
| author | Bananeweizen <bananeweizen@gmx.de> | 2013-12-18 19:30:20 +0100 |
|---|---|---|
| committer | Bananeweizen <bananeweizen@gmx.de> | 2013-12-18 19:30:20 +0100 |
| commit | cf77b87b439e016999afc181fca133d68313867d (patch) | |
| tree | e340355fa8da99a5ff3922fb3b176c0cde71931d /main/src/cgeo/geocaching/maps/PositionAndScaleOverlay.java | |
| parent | e20a20f09474ad7187dccdd54ce044c91d165196 (diff) | |
| download | cgeo-cf77b87b439e016999afc181fca133d68313867d.zip cgeo-cf77b87b439e016999afc181fca133d68313867d.tar.gz cgeo-cf77b87b439e016999afc181fca133d68313867d.tar.bz2 | |
refactoring: reduce mapsforge memory usage
This puts scale and position into one overlay, instead of using 2
overlays. That reduces memory usage by 2 times a full screen bitmap due
to double buffering in mapsforge.
The only downside is that scale and position now have to be drawn at the
same depth-level (below or on top of the caches), but they were both on
top previously anyway.
Diffstat (limited to 'main/src/cgeo/geocaching/maps/PositionAndScaleOverlay.java')
| -rw-r--r-- | main/src/cgeo/geocaching/maps/PositionAndScaleOverlay.java | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/main/src/cgeo/geocaching/maps/PositionAndScaleOverlay.java b/main/src/cgeo/geocaching/maps/PositionAndScaleOverlay.java new file mode 100644 index 0000000..6b34b75 --- /dev/null +++ b/main/src/cgeo/geocaching/maps/PositionAndScaleOverlay.java @@ -0,0 +1,73 @@ +package cgeo.geocaching.maps; + +import cgeo.geocaching.maps.interfaces.GeneralOverlay; +import cgeo.geocaching.maps.interfaces.MapProjectionImpl; +import cgeo.geocaching.maps.interfaces.MapViewImpl; +import cgeo.geocaching.maps.interfaces.OverlayImpl; + +import android.app.Activity; +import android.graphics.Canvas; +import android.graphics.Point; +import android.location.Location; + +import java.util.ArrayList; + +public class PositionAndScaleOverlay implements GeneralOverlay { + private OverlayImpl ovlImpl = null; + + PositionDrawer positionDrawer = null; + ScaleDrawer scaleDrawer = null; + + public PositionAndScaleOverlay(Activity activity, OverlayImpl ovlImpl) { + this.ovlImpl = ovlImpl; + positionDrawer = new PositionDrawer(activity); + scaleDrawer = new ScaleDrawer(activity); + } + + public void setCoordinates(Location coordinatesIn) { + positionDrawer.setCoordinates(coordinatesIn); + } + + public Location getCoordinates() { + return positionDrawer.getCoordinates(); + } + + public void setHeading(float bearingNow) { + positionDrawer.setHeading(bearingNow); + } + + public float getHeading() { + return positionDrawer.getHeading(); + } + + @Override + public void drawOverlayBitmap(Canvas canvas, Point drawPosition, + MapProjectionImpl projection, byte drawZoomLevel) { + + drawInternal(canvas, projection, getOverlayImpl().getMapViewImpl()); + } + + @Override + public void draw(Canvas canvas, MapViewImpl mapView, boolean shadow) { + + drawInternal(canvas, mapView.getMapProjection(), mapView); + } + + private void drawInternal(Canvas canvas, MapProjectionImpl projection, MapViewImpl mapView) { + positionDrawer.drawPosition(canvas, projection); + scaleDrawer.drawScale(canvas, mapView); + } + + @Override + public OverlayImpl getOverlayImpl() { + return this.ovlImpl; + } + + public ArrayList<Location> getHistory() { + return positionDrawer.getHistory(); + } + + public void setHistory(ArrayList<Location> history) { + positionDrawer.setHistory(history); + } +} |
