aboutsummaryrefslogtreecommitdiffstats
path: root/main/src/cgeo/geocaching/maps/PositionAndScaleOverlay.java
diff options
context:
space:
mode:
authorBananeweizen <bananeweizen@gmx.de>2013-12-18 19:30:20 +0100
committerBananeweizen <bananeweizen@gmx.de>2013-12-18 19:30:20 +0100
commitcf77b87b439e016999afc181fca133d68313867d (patch)
treee340355fa8da99a5ff3922fb3b176c0cde71931d /main/src/cgeo/geocaching/maps/PositionAndScaleOverlay.java
parente20a20f09474ad7187dccdd54ce044c91d165196 (diff)
downloadcgeo-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.java73
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);
+ }
+}