From 2d64186a1a1c53daf0fb4f134b46ff087f942db2 Mon Sep 17 00:00:00 2001 From: Emux Date: Mon, 27 Apr 2020 21:22:27 +0300 Subject: [PATCH] More mutable itemized layer --- .../test/AtlasMultiTextureActivity.java | 22 +++++--- .../test/ClusterMarkerOverlayActivity.java | 6 +- .../android/test/MarkerOverlayActivity.java | 32 ++++++----- .../oscim/android/test/PoiSearchActivity.java | 18 +++--- vtm-app/src/org/oscim/app/POISearch.java | 15 ++--- vtm-app/src/org/oscim/app/RouteSearch.java | 8 +-- .../overlays/ItemizedOverlayWithBubble.java | 21 +++---- .../org/oscim/test/AtlasMultiTextureTest.java | 22 +++++--- .../oscim/test/ClusterMarkerLayerTest.java | 6 +- .../org/oscim/test/MarkerLayerLabelsTest.java | 26 +++++---- .../src/org/oscim/test/MarkerLayerTest.java | 31 ++++++----- .../layers/marker/ClusterMarkerRenderer.java | 10 ++-- .../oscim/layers/marker/ItemizedLayer.java | 55 ++++++++----------- .../org/oscim/layers/marker/MarkerLayer.java | 15 +++-- .../oscim/layers/marker/MarkerRenderer.java | 4 +- 15 files changed, 147 insertions(+), 144 deletions(-) diff --git a/vtm-android-example/src/org/oscim/android/test/AtlasMultiTextureActivity.java b/vtm-android-example/src/org/oscim/android/test/AtlasMultiTextureActivity.java index 76d198c8..85276cc3 100644 --- a/vtm-android-example/src/org/oscim/android/test/AtlasMultiTextureActivity.java +++ b/vtm-android-example/src/org/oscim/android/test/AtlasMultiTextureActivity.java @@ -26,6 +26,7 @@ import org.oscim.backend.canvas.Color; import org.oscim.backend.canvas.Paint; import org.oscim.core.GeoPoint; import org.oscim.layers.marker.ItemizedLayer; +import org.oscim.layers.marker.MarkerInterface; import org.oscim.layers.marker.MarkerItem; import org.oscim.layers.marker.MarkerSymbol; import org.oscim.layers.marker.MarkerSymbol.HotspotPlace; @@ -66,7 +67,7 @@ public class AtlasMultiTextureActivity extends MarkerOverlayActivity { paint.setTextSize(12 * CanvasAdapter.getScale()); paint.setStrokeWidth(2 * CanvasAdapter.getScale()); paint.setColor(Color.BLACK); - List pts = new ArrayList<>(); + List pts = new ArrayList<>(); for (double lat = -90; lat <= 90; lat += 10) { for (double lon = -180; lon <= 180; lon += 10) { String title = lat + "/" + lon; @@ -86,29 +87,32 @@ public class AtlasMultiTextureActivity extends MarkerOverlayActivity { // With iOS we must flip the Y-Axis TextureAtlasUtils.createTextureRegions(inputMap, regionsMap, atlasList, true, false); - mMarkerLayer = new ItemizedLayer<>(mMap, new ArrayList(), (MarkerSymbol) null, this); + mMarkerLayer = new ItemizedLayer(mMap, new ArrayList(), (MarkerSymbol) null, this); mMap.layers().add(mMarkerLayer); mMarkerLayer.addItems(pts); // set all markers - for (MarkerItem item : pts) { - MarkerSymbol markerSymbol = new MarkerSymbol(regionsMap.get(item.getTitle()), HotspotPlace.BOTTOM_CENTER); - item.setMarker(markerSymbol); + for (MarkerInterface item : pts) { + MarkerItem markerItem = (MarkerItem) item; + MarkerSymbol markerSymbol = new MarkerSymbol(regionsMap.get(markerItem.getTitle()), HotspotPlace.BOTTOM_CENTER); + markerItem.setMarker(markerSymbol); } Toast.makeText(this, "Atlas count: " + atlasList.size(), Toast.LENGTH_SHORT).show(); } @Override - public boolean onItemSingleTapUp(int index, MarkerItem item) { - Toast.makeText(this, "Marker tap\n" + item.getTitle(), Toast.LENGTH_SHORT).show(); + public boolean onItemSingleTapUp(int index, MarkerInterface item) { + MarkerItem markerItem = (MarkerItem) item; + Toast.makeText(this, "Marker tap\n" + markerItem.getTitle(), Toast.LENGTH_SHORT).show(); return true; } @Override - public boolean onItemLongPress(int index, MarkerItem item) { - Toast.makeText(this, "Marker long press\n" + item.getTitle(), Toast.LENGTH_SHORT).show(); + public boolean onItemLongPress(int index, MarkerInterface item) { + MarkerItem markerItem = (MarkerItem) item; + Toast.makeText(this, "Marker long press\n" + markerItem.getTitle(), Toast.LENGTH_SHORT).show(); return true; } } diff --git a/vtm-android-example/src/org/oscim/android/test/ClusterMarkerOverlayActivity.java b/vtm-android-example/src/org/oscim/android/test/ClusterMarkerOverlayActivity.java index ae64622a..9f89ebda 100644 --- a/vtm-android-example/src/org/oscim/android/test/ClusterMarkerOverlayActivity.java +++ b/vtm-android-example/src/org/oscim/android/test/ClusterMarkerOverlayActivity.java @@ -65,15 +65,15 @@ public class ClusterMarkerOverlayActivity extends MarkerOverlayActivity { }; } }; - mMarkerLayer = new ItemizedLayer<>( + mMarkerLayer = new ItemizedLayer( mMap, - new ArrayList(), + new ArrayList(), markerRendererFactory, this); mMap.layers().add(mMarkerLayer); // Create some markers spaced STEP degrees - List pts = new ArrayList<>(); + List pts = new ArrayList<>(); mMap.setMapPosition(53.08, 8.83, 1 << 15); GeoPoint center = mMap.getMapPosition().getGeoPoint(); for (int x = -COUNT; x < COUNT; x++) { diff --git a/vtm-android-example/src/org/oscim/android/test/MarkerOverlayActivity.java b/vtm-android-example/src/org/oscim/android/test/MarkerOverlayActivity.java index 0fac44cd..abaaab74 100644 --- a/vtm-android-example/src/org/oscim/android/test/MarkerOverlayActivity.java +++ b/vtm-android-example/src/org/oscim/android/test/MarkerOverlayActivity.java @@ -28,6 +28,7 @@ import org.oscim.event.GestureListener; import org.oscim.event.MotionEvent; import org.oscim.layers.Layer; import org.oscim.layers.marker.ItemizedLayer; +import org.oscim.layers.marker.MarkerInterface; import org.oscim.layers.marker.MarkerItem; import org.oscim.layers.marker.MarkerSymbol; import org.oscim.layers.marker.MarkerSymbol.HotspotPlace; @@ -41,12 +42,11 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -public class MarkerOverlayActivity extends MapActivity - implements ItemizedLayer.OnItemGestureListener { +public class MarkerOverlayActivity extends MapActivity implements ItemizedLayer.OnItemGestureListener { static final boolean BILLBOARDS = true; MarkerSymbol mFocusMarker; - ItemizedLayer mMarkerLayer; + ItemizedLayer mMarkerLayer; @Override public void onCreate(Bundle savedInstanceState) { @@ -78,10 +78,10 @@ public class MarkerOverlayActivity extends MapActivity else mFocusMarker = new MarkerSymbol(bitmapFocus, HotspotPlace.CENTER, false); - mMarkerLayer = new ItemizedLayer<>(mMap, new ArrayList(), symbol, this); + mMarkerLayer = new ItemizedLayer(mMap, new ArrayList(), symbol, this); mMap.layers().add(mMarkerLayer); - List pts = new ArrayList<>(); + List pts = new ArrayList<>(); for (double lat = -90; lat <= 90; lat += 5) { for (double lon = -180; lon <= 180; lon += 5) @@ -100,24 +100,26 @@ public class MarkerOverlayActivity extends MapActivity } @Override - public boolean onItemSingleTapUp(int index, MarkerItem item) { - if (item.getMarker() == null) - item.setMarker(mFocusMarker); + public boolean onItemSingleTapUp(int index, MarkerInterface item) { + MarkerItem markerItem = (MarkerItem) item; + if (markerItem.getMarker() == null) + markerItem.setMarker(mFocusMarker); else - item.setMarker(null); + markerItem.setMarker(null); - Toast.makeText(this, "Marker tap\n" + item.getTitle(), Toast.LENGTH_SHORT).show(); + Toast.makeText(this, "Marker tap\n" + markerItem.getTitle(), Toast.LENGTH_SHORT).show(); return true; } @Override - public boolean onItemLongPress(int index, MarkerItem item) { - if (item.getMarker() == null) - item.setMarker(mFocusMarker); + public boolean onItemLongPress(int index, MarkerInterface item) { + MarkerItem markerItem = (MarkerItem) item; + if (markerItem.getMarker() == null) + markerItem.setMarker(mFocusMarker); else - item.setMarker(null); + markerItem.setMarker(null); - Toast.makeText(this, "Marker long press\n" + item.getTitle(), Toast.LENGTH_SHORT).show(); + Toast.makeText(this, "Marker long press\n" + markerItem.getTitle(), Toast.LENGTH_SHORT).show(); return true; } diff --git a/vtm-android-example/src/org/oscim/android/test/PoiSearchActivity.java b/vtm-android-example/src/org/oscim/android/test/PoiSearchActivity.java index d0b553b3..0b31d3c2 100644 --- a/vtm-android-example/src/org/oscim/android/test/PoiSearchActivity.java +++ b/vtm-android-example/src/org/oscim/android/test/PoiSearchActivity.java @@ -1,5 +1,5 @@ /* - * Copyright 2017-2019 devemux86 + * Copyright 2017-2020 devemux86 * Copyright 2018 Gustl22 * * This program is free software: you can redistribute it and/or modify it under the @@ -41,6 +41,7 @@ import org.oscim.event.GestureListener; import org.oscim.event.MotionEvent; import org.oscim.layers.Layer; import org.oscim.layers.marker.ItemizedLayer; +import org.oscim.layers.marker.MarkerInterface; import org.oscim.layers.marker.MarkerItem; import org.oscim.layers.marker.MarkerSymbol; import org.oscim.map.Map; @@ -57,14 +58,14 @@ import java.util.List; * Long press on map to search inside visible bounding box.
* Tap on POIs to show their name (in default locale). */ -public class PoiSearchActivity extends MapsforgeActivity implements ItemizedLayer.OnItemGestureListener { +public class PoiSearchActivity extends MapsforgeActivity implements ItemizedLayer.OnItemGestureListener { private static final Logger log = LoggerFactory.getLogger(PoiSearchActivity.class); private static final String POI_CATEGORY = "Restaurants"; private static final int SELECT_POI_FILE = MapsforgeActivity.SELECT_THEME_FILE + 1; - private ItemizedLayer mMarkerLayer; + private ItemizedLayer mMarkerLayer; private PoiPersistenceManager mPersistenceManager; public static class PoiFilePicker extends FilePicker { @@ -154,19 +155,20 @@ public class PoiSearchActivity extends MapsforgeActivity implements ItemizedLaye Bitmap bitmap = new AndroidBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.marker_green)); MarkerSymbol symbol = new MarkerSymbol(bitmap, MarkerSymbol.HotspotPlace.BOTTOM_CENTER); - mMarkerLayer = new ItemizedLayer<>(mMap, new ArrayList(), symbol, this); + mMarkerLayer = new ItemizedLayer(mMap, new ArrayList(), symbol, this); mMap.layers().add(mMarkerLayer); } } @Override - public boolean onItemSingleTapUp(int index, MarkerItem item) { - Toast.makeText(this, item.getTitle(), Toast.LENGTH_SHORT).show(); + public boolean onItemSingleTapUp(int index, MarkerInterface item) { + MarkerItem markerItem = (MarkerItem) item; + Toast.makeText(this, markerItem.getTitle(), Toast.LENGTH_SHORT).show(); return true; } @Override - public boolean onItemLongPress(int index, MarkerItem item) { + public boolean onItemLongPress(int index, MarkerInterface item) { return false; } @@ -315,7 +317,7 @@ public class PoiSearchActivity extends MapsforgeActivity implements ItemizedLaye } // Overlay POI - List pts = new ArrayList<>(); + List pts = new ArrayList<>(); for (PointOfInterest pointOfInterest : pointOfInterests) pts.add(new MarkerItem(pointOfInterest.getName(), "", new GeoPoint(pointOfInterest.getLatitude(), pointOfInterest.getLongitude()))); mMarkerLayer.addItems(pts); diff --git a/vtm-app/src/org/oscim/app/POISearch.java b/vtm-app/src/org/oscim/app/POISearch.java index a779218e..2924a3d0 100644 --- a/vtm-app/src/org/oscim/app/POISearch.java +++ b/vtm-app/src/org/oscim/app/POISearch.java @@ -23,19 +23,14 @@ import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.Toast; - import org.oscim.android.canvas.AndroidGraphics; import org.oscim.core.BoundingBox; import org.oscim.core.GeoPoint; +import org.oscim.layers.marker.MarkerInterface; import org.oscim.layers.marker.MarkerSymbol; import org.oscim.layers.marker.MarkerSymbol.HotspotPlace; import org.oscim.map.Map; -import org.osmdroid.location.FlickrPOIProvider; -import org.osmdroid.location.FourSquareProvider; -import org.osmdroid.location.GeoNamesPOIProvider; -import org.osmdroid.location.NominatimPOIProvider; -import org.osmdroid.location.POI; -import org.osmdroid.location.PicasaPOIProvider; +import org.osmdroid.location.*; import org.osmdroid.overlays.DefaultInfoWindow; import org.osmdroid.overlays.ExtendedMarkerItem; import org.osmdroid.overlays.ItemizedOverlayWithBubble; @@ -45,7 +40,7 @@ import java.util.List; public class POISearch { private final ArrayList mPOIs; - ItemizedOverlayWithBubble poiMarkers; + ItemizedOverlayWithBubble poiMarkers; MarkerSymbol[] mMarkers; private static final int MDEFAULT = 0; @@ -57,9 +52,9 @@ public class POISearch { POISearch() { mPOIs = new ArrayList(); //POI markers: - final ArrayList poiItems = new ArrayList(); + final ArrayList poiItems = new ArrayList<>(); - poiMarkers = new ItemizedOverlayWithBubble(App.map, + poiMarkers = new ItemizedOverlayWithBubble(App.map, App.activity, null, poiItems, diff --git a/vtm-app/src/org/oscim/app/RouteSearch.java b/vtm-app/src/org/oscim/app/RouteSearch.java index 92ef14e1..cb2e47a5 100644 --- a/vtm-app/src/org/oscim/app/RouteSearch.java +++ b/vtm-app/src/org/oscim/app/RouteSearch.java @@ -24,10 +24,10 @@ import android.widget.Button; import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; - import org.oscim.android.canvas.AndroidGraphics; import org.oscim.core.GeoPoint; import org.oscim.layers.PathLayer; +import org.oscim.layers.marker.MarkerInterface; import org.oscim.layers.marker.MarkerSymbol; import org.oscim.layers.marker.MarkerSymbol.HotspotPlace; import org.osmdroid.location.GeocoderNominatim; @@ -48,7 +48,7 @@ public class RouteSearch { private final PathLayer mRouteOverlay; //private final ItemizedOverlayWithBubble mRouteMarkers; - private final ItemizedOverlayWithBubble mItineraryMarkers; + private final ItemizedOverlayWithBubble mItineraryMarkers; private final RouteBar mRouteBar; @@ -63,9 +63,9 @@ public class RouteSearch { mViaPoints = new ArrayList(); // Itinerary markers: - ArrayList waypointsItems = new ArrayList(); + ArrayList waypointsItems = new ArrayList<>(); - mItineraryMarkers = new ItemizedOverlayWithBubble(App.map, + mItineraryMarkers = new ItemizedOverlayWithBubble(App.map, App.activity, null, waypointsItems, diff --git a/vtm-app/src/org/osmdroid/overlays/ItemizedOverlayWithBubble.java b/vtm-app/src/org/osmdroid/overlays/ItemizedOverlayWithBubble.java index 15925709..4b064e25 100644 --- a/vtm-app/src/org/osmdroid/overlays/ItemizedOverlayWithBubble.java +++ b/vtm-app/src/org/osmdroid/overlays/ItemizedOverlayWithBubble.java @@ -2,7 +2,6 @@ package org.osmdroid.overlays; import android.content.Context; import android.util.Log; - import org.oscim.app.App; import org.oscim.core.GeoPoint; import org.oscim.core.MapPosition; @@ -10,6 +9,7 @@ import org.oscim.core.Point; import org.oscim.event.Event; import org.oscim.event.MotionEvent; import org.oscim.layers.marker.ItemizedLayer; +import org.oscim.layers.marker.MarkerInterface; import org.oscim.layers.marker.MarkerItem; import org.oscim.layers.marker.MarkerSymbol; import org.oscim.map.Map; @@ -22,14 +22,12 @@ import java.util.List; * taps on an overlay item, and displays item attributes.
* Items must be ExtendedMarkerItem.
* - * @param ... * @author M.Kergall * @see ExtendedMarkerItem * @see InfoWindow */ -public class ItemizedOverlayWithBubble extends - ItemizedLayer implements - ItemizedLayer.OnItemGestureListener, Map.UpdateListener { +public class ItemizedOverlayWithBubble extends ItemizedLayer + implements ItemizedLayer.OnItemGestureListener, Map.UpdateListener { /* only one for all items of this overlay => one at a time */ protected InfoWindow mBubble; @@ -40,7 +38,7 @@ public class ItemizedOverlayWithBubble extends static int layoutResId = 0; public ItemizedOverlayWithBubble(Map map, Context context, - MarkerSymbol marker, List list, InfoWindow bubble) { + MarkerSymbol marker, List list, InfoWindow bubble) { super(map, list, marker, null); if (bubble != null) { @@ -66,12 +64,12 @@ public class ItemizedOverlayWithBubble extends } public ItemizedOverlayWithBubble(Map map, Context context, - MarkerSymbol marker, List aList) { + MarkerSymbol marker, List aList) { this(map, context, marker, aList, null); } @Override - public boolean onItemLongPress(int index, MarkerItem item) { + public boolean onItemLongPress(int index, MarkerInterface item) { if (mBubble.isOpen()) hideBubble(); else @@ -80,7 +78,7 @@ public class ItemizedOverlayWithBubble extends } @Override - public boolean onItemSingleTapUp(int index, MarkerItem item) { + public boolean onItemSingleTapUp(int index, MarkerInterface item) { showBubble(index); return true; @@ -121,7 +119,6 @@ public class ItemizedOverlayWithBubble extends * * @param index of the overlay item to show */ - @SuppressWarnings("unchecked") public void showBubbleOnItem(int index) { ExtendedMarkerItem item = (ExtendedMarkerItem) (mItemList.get(index)); mItemWithBubble = item; @@ -131,7 +128,7 @@ public class ItemizedOverlayWithBubble extends mMap.animator().animateTo(item.geoPoint); mMap.updateMap(true); - setFocus((Item) item); + setFocus(item); } } @@ -179,7 +176,7 @@ public class ItemizedOverlayWithBubble extends } @Override - public synchronized boolean removeItem(final Item item) { + public synchronized boolean removeItem(final MarkerInterface item) { boolean result = super.removeItem(item); if (mItemWithBubble == item) { hideBubble(); diff --git a/vtm-playground/src/org/oscim/test/AtlasMultiTextureTest.java b/vtm-playground/src/org/oscim/test/AtlasMultiTextureTest.java index 98e755b0..bc7b255e 100644 --- a/vtm-playground/src/org/oscim/test/AtlasMultiTextureTest.java +++ b/vtm-playground/src/org/oscim/test/AtlasMultiTextureTest.java @@ -23,6 +23,7 @@ import org.oscim.backend.canvas.Paint; import org.oscim.core.GeoPoint; import org.oscim.gdx.GdxMapApp; import org.oscim.layers.marker.ItemizedLayer; +import org.oscim.layers.marker.MarkerInterface; import org.oscim.layers.marker.MarkerItem; import org.oscim.layers.marker.MarkerSymbol; import org.oscim.layers.tile.bitmap.BitmapTileLayer; @@ -66,7 +67,7 @@ public class AtlasMultiTextureTest extends MarkerLayerTest { paint.setTextSize(12); paint.setStrokeWidth(2); paint.setColor(Color.BLACK); - List pts = new ArrayList<>(); + List pts = new ArrayList<>(); for (double lat = -90; lat <= 90; lat += 5) { for (double lon = -180; lon <= 180; lon += 5) { String title = lat + "/" + lon; @@ -86,29 +87,32 @@ public class AtlasMultiTextureTest extends MarkerLayerTest { // With iOS we must flip the Y-Axis TextureAtlasUtils.createTextureRegions(inputMap, regionsMap, atlasList, true, false); - mMarkerLayer = new ItemizedLayer<>(mMap, new ArrayList(), (MarkerSymbol) null, this); + mMarkerLayer = new ItemizedLayer(mMap, new ArrayList(), (MarkerSymbol) null, this); mMap.layers().add(mMarkerLayer); mMarkerLayer.addItems(pts); // set all markers - for (MarkerItem item : pts) { - MarkerSymbol markerSymbol = new MarkerSymbol(regionsMap.get(item.getTitle()), HotspotPlace.BOTTOM_CENTER); - item.setMarker(markerSymbol); + for (MarkerInterface item : pts) { + MarkerItem markerItem = (MarkerItem) item; + MarkerSymbol markerSymbol = new MarkerSymbol(regionsMap.get(markerItem.getTitle()), HotspotPlace.BOTTOM_CENTER); + markerItem.setMarker(markerSymbol); } System.out.println("Atlas count: " + atlasList.size()); } @Override - public boolean onItemSingleTapUp(int index, MarkerItem item) { - System.out.println("Marker tap " + item.getTitle()); + public boolean onItemSingleTapUp(int index, MarkerInterface item) { + MarkerItem markerItem = (MarkerItem) item; + System.out.println("Marker tap " + markerItem.getTitle()); return true; } @Override - public boolean onItemLongPress(int index, MarkerItem item) { - System.out.println("Marker long press " + item.getTitle()); + public boolean onItemLongPress(int index, MarkerInterface item) { + MarkerItem markerItem = (MarkerItem) item; + System.out.println("Marker long press " + markerItem.getTitle()); return true; } diff --git a/vtm-playground/src/org/oscim/test/ClusterMarkerLayerTest.java b/vtm-playground/src/org/oscim/test/ClusterMarkerLayerTest.java index 3bfed4c4..07988e20 100644 --- a/vtm-playground/src/org/oscim/test/ClusterMarkerLayerTest.java +++ b/vtm-playground/src/org/oscim/test/ClusterMarkerLayerTest.java @@ -69,15 +69,15 @@ public class ClusterMarkerLayerTest extends MarkerLayerTest { }; } }; - mMarkerLayer = new ItemizedLayer<>( + mMarkerLayer = new ItemizedLayer( mMap, - new ArrayList(), + new ArrayList(), markerRendererFactory, this); mMap.layers().add(mMarkerLayer); // Create some markers spaced STEP degrees - List pts = new ArrayList<>(); + List pts = new ArrayList<>(); GeoPoint center = mMap.getMapPosition().getGeoPoint(); for (int x = -COUNT; x < COUNT; x++) { for (int y = -COUNT; y < COUNT; y++) { diff --git a/vtm-playground/src/org/oscim/test/MarkerLayerLabelsTest.java b/vtm-playground/src/org/oscim/test/MarkerLayerLabelsTest.java index c1534746..1a6ed3a9 100644 --- a/vtm-playground/src/org/oscim/test/MarkerLayerLabelsTest.java +++ b/vtm-playground/src/org/oscim/test/MarkerLayerLabelsTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2016-2018 devemux86 + * Copyright 2016-2020 devemux86 * Copyright 2019 telemaxx * * This program is free software: you can redistribute it and/or modify it under the @@ -25,6 +25,7 @@ import org.oscim.event.MotionEvent; import org.oscim.gdx.GdxMapApp; import org.oscim.layers.Layer; import org.oscim.layers.marker.ItemizedLayer; +import org.oscim.layers.marker.MarkerInterface; import org.oscim.layers.marker.MarkerItem; import org.oscim.layers.marker.MarkerSymbol; import org.oscim.layers.tile.vector.VectorTileLayer; @@ -41,7 +42,7 @@ import java.util.List; import static org.oscim.layers.marker.MarkerSymbol.HotspotPlace; -public class MarkerLayerLabelsTest extends GdxMapApp implements ItemizedLayer.OnItemGestureListener { +public class MarkerLayerLabelsTest extends GdxMapApp implements ItemizedLayer.OnItemGestureListener { private static final int FG_COLOR = 0xFF000000; // 100 percent black. AARRGGBB private static final int BG_COLOR = 0x80FF69B4; // 50 percent pink. AARRGGBB @@ -87,11 +88,11 @@ public class MarkerLayerLabelsTest extends GdxMapApp implements ItemizedLayer.On //Bitmap bitmapPoi = CanvasAdapter.decodeBitmap(getClass().getResourceAsStream("/res/marker_poi2.png")); MarkerSymbol symbol = new MarkerSymbol(bitmapPoi, HotspotPlace.CENTER, false); - ItemizedLayer markerLayer = new ItemizedLayer<>(mMap, new ArrayList(), symbol, this); + ItemizedLayer markerLayer = new ItemizedLayer(mMap, new ArrayList(), symbol, this); mMap.layers().add(markerLayer); // creating some poi's - List pts = new ArrayList<>(); + List pts = new ArrayList<>(); pts.add(new MarkerItem("Brandenburger Tor", "#1789-1793", new GeoPoint(52.516275, 13.377704))); pts.add(new MarkerItem("Siegessaeule, hidden description", "this is a hidden Description without a #", new GeoPoint(52.514543, 13.350119))); pts.add(new MarkerItem("Gleisdreieck, without description", "", new GeoPoint(52.499562, 13.374063))); @@ -101,9 +102,10 @@ public class MarkerLayerLabelsTest extends GdxMapApp implements ItemizedLayer.On + "is drawn on the map\n" + "the rest is surpressed", new GeoPoint(52.509352, 13.375739))); - for (MarkerItem mi : pts) { - System.out.println("title: " + mi.title); - mi.setMarker(createAdvancedSymbol(mi, bitmapPoi)); + for (MarkerInterface mi : pts) { + MarkerItem markerItem = (MarkerItem) mi; + System.out.println("title: " + markerItem.title); + markerItem.setMarker(createAdvancedSymbol(markerItem, bitmapPoi)); } markerLayer.addItems(pts); @@ -198,14 +200,16 @@ public class MarkerLayerLabelsTest extends GdxMapApp implements ItemizedLayer.On } @Override - public boolean onItemSingleTapUp(int index, MarkerItem item) { - System.out.println("Marker tap " + item.getTitle()); + public boolean onItemSingleTapUp(int index, MarkerInterface item) { + MarkerItem markerItem = (MarkerItem) item; + System.out.println("Marker tap " + markerItem.getTitle()); return true; } @Override - public boolean onItemLongPress(int index, MarkerItem item) { - System.out.println("Marker long press " + item.getTitle()); + public boolean onItemLongPress(int index, MarkerInterface item) { + MarkerItem markerItem = (MarkerItem) item; + System.out.println("Marker long press " + markerItem.getTitle()); return true; } diff --git a/vtm-playground/src/org/oscim/test/MarkerLayerTest.java b/vtm-playground/src/org/oscim/test/MarkerLayerTest.java index 167d79c2..c2fc3ef3 100644 --- a/vtm-playground/src/org/oscim/test/MarkerLayerTest.java +++ b/vtm-playground/src/org/oscim/test/MarkerLayerTest.java @@ -23,6 +23,7 @@ import org.oscim.event.MotionEvent; import org.oscim.gdx.GdxMapApp; import org.oscim.layers.Layer; import org.oscim.layers.marker.ItemizedLayer; +import org.oscim.layers.marker.MarkerInterface; import org.oscim.layers.marker.MarkerItem; import org.oscim.layers.marker.MarkerSymbol; import org.oscim.layers.tile.bitmap.BitmapTileLayer; @@ -38,11 +39,11 @@ import java.util.List; import static org.oscim.layers.marker.MarkerSymbol.HotspotPlace; -public class MarkerLayerTest extends GdxMapApp implements ItemizedLayer.OnItemGestureListener { +public class MarkerLayerTest extends GdxMapApp implements ItemizedLayer.OnItemGestureListener { static final boolean BILLBOARDS = true; MarkerSymbol mFocusMarker; - ItemizedLayer mMarkerLayer; + ItemizedLayer mMarkerLayer; @Override public void createLayers() { @@ -71,10 +72,10 @@ public class MarkerLayerTest extends GdxMapApp implements ItemizedLayer.OnItemGe else mFocusMarker = new MarkerSymbol(bitmapFocus, HotspotPlace.CENTER, false); - mMarkerLayer = new ItemizedLayer<>(mMap, new ArrayList(), symbol, this); + mMarkerLayer = new ItemizedLayer(mMap, new ArrayList(), symbol, this); mMap.layers().add(mMarkerLayer); - List pts = new ArrayList<>(); + List pts = new ArrayList<>(); for (double lat = -90; lat <= 90; lat += 5) { for (double lon = -180; lon <= 180; lon += 5) pts.add(new MarkerItem(lat + "/" + lon, "", new GeoPoint(lat, lon))); @@ -86,24 +87,26 @@ public class MarkerLayerTest extends GdxMapApp implements ItemizedLayer.OnItemGe } @Override - public boolean onItemSingleTapUp(int index, MarkerItem item) { - if (item.getMarker() == null) - item.setMarker(mFocusMarker); + public boolean onItemSingleTapUp(int index, MarkerInterface item) { + MarkerItem markerItem = (MarkerItem) item; + if (markerItem.getMarker() == null) + markerItem.setMarker(mFocusMarker); else - item.setMarker(null); + markerItem.setMarker(null); - System.out.println("Marker tap " + item.getTitle()); + System.out.println("Marker tap " + markerItem.getTitle()); return true; } @Override - public boolean onItemLongPress(int index, MarkerItem item) { - if (item.getMarker() == null) - item.setMarker(mFocusMarker); + public boolean onItemLongPress(int index, MarkerInterface item) { + MarkerItem markerItem = (MarkerItem) item; + if (markerItem.getMarker() == null) + markerItem.setMarker(mFocusMarker); else - item.setMarker(null); + markerItem.setMarker(null); - System.out.println("Marker long press " + item.getTitle()); + System.out.println("Marker long press " + markerItem.getTitle()); return true; } diff --git a/vtm/src/org/oscim/layers/marker/ClusterMarkerRenderer.java b/vtm/src/org/oscim/layers/marker/ClusterMarkerRenderer.java index f91b9bac..c81a6abd 100644 --- a/vtm/src/org/oscim/layers/marker/ClusterMarkerRenderer.java +++ b/vtm/src/org/oscim/layers/marker/ClusterMarkerRenderer.java @@ -98,7 +98,7 @@ public class ClusterMarkerRenderer extends MarkerRenderer { * @param defaultSymbol The default symbol * @param style The desired style, or NULL to disable clustering */ - public ClusterMarkerRenderer(MarkerLayer markerLayer, MarkerSymbol defaultSymbol, ClusterMarkerRenderer.ClusterStyle style) { + public ClusterMarkerRenderer(MarkerLayer markerLayer, MarkerSymbol defaultSymbol, ClusterMarkerRenderer.ClusterStyle style) { super(markerLayer, defaultSymbol); mClusteringEnabled = style != null; @@ -141,7 +141,7 @@ public class ClusterMarkerRenderer extends MarkerRenderer { /* the grid slot size in px. increase to group more aggressively. currently set to marker size */ final int GRIDSIZE = ScreenUtils.getPixels(MAP_GRID_SIZE_DP); - /* the factor to map into Grid Coordinates (discrete squares of GRIDSIZE x GRIDSIZE) */ + /* the factor to map into Grid Coordinates (discrete squares of GRIDSIZE x GRIDSIZE) */ final double factor = (scale / GRIDSIZE); InternalItem.Clustered[] tmp = new InternalItem.Clustered[size]; @@ -154,7 +154,7 @@ public class ClusterMarkerRenderer extends MarkerRenderer { it.item = mMarkerLayer.createItem(i); - /* pre-project points */ + /* pre-project points */ MercatorProjection.project(it.item.getPoint(), mMapPoint); it.px = mMapPoint.x; it.py = mMapPoint.y; @@ -260,7 +260,7 @@ public class ClusterMarkerRenderer extends MarkerRenderer { float cos = (float) Math.cos(angle); float sin = (float) Math.sin(angle); - /* check visibility */ + /* check visibility */ for (InternalItem itm : mItems) { InternalItem.Clustered it = (InternalItem.Clustered) itm; @@ -299,7 +299,7 @@ public class ClusterMarkerRenderer extends MarkerRenderer { //log.debug(numVisible + " " + changedVisible + " " + changesInvisible); - /* only update when zoomlevel changed, new items are visible + /* only update when zoomlevel changed, new items are visible * or more than 10 of the current items became invisible */ //if ((numVisible == 0) && (changedVisible == 0 && changesInvisible < 10)) // return; diff --git a/vtm/src/org/oscim/layers/marker/ItemizedLayer.java b/vtm/src/org/oscim/layers/marker/ItemizedLayer.java index faf54d81..0e65a1f0 100644 --- a/vtm/src/org/oscim/layers/marker/ItemizedLayer.java +++ b/vtm/src/org/oscim/layers/marker/ItemizedLayer.java @@ -31,30 +31,25 @@ import org.oscim.event.GestureListener; import org.oscim.event.MotionEvent; import org.oscim.map.Map; import org.oscim.map.Viewport; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.Collection; import java.util.List; -public class ItemizedLayer extends MarkerLayer - implements GestureListener { +public class ItemizedLayer extends MarkerLayer implements GestureListener { - static final Logger log = LoggerFactory.getLogger(ItemizedLayer.class); - - protected final List mItemList; + protected final List mItemList; protected final Point mTmpPoint = new Point(); - protected OnItemGestureListener mOnItemGestureListener; + protected OnItemGestureListener mOnItemGestureListener; protected int mDrawnItemsLimit = Integer.MAX_VALUE; public ItemizedLayer(Map map, MarkerSymbol defaultMarker) { - this(map, new ArrayList(), defaultMarker, null); + this(map, new ArrayList(), defaultMarker, null); } - public ItemizedLayer(Map map, List list, + public ItemizedLayer(Map map, List list, MarkerSymbol defaultMarker, - OnItemGestureListener listener) { + OnItemGestureListener listener) { super(map, defaultMarker); @@ -64,12 +59,12 @@ public class ItemizedLayer extends MarkerLayer(), markerRendererFactory, null); + this(map, new ArrayList(), markerRendererFactory, null); } - public ItemizedLayer(Map map, List list, + public ItemizedLayer(Map map, List list, MarkerRendererFactory markerRendererFactory, - OnItemGestureListener listener) { + OnItemGestureListener listener) { super(map, markerRendererFactory); @@ -78,12 +73,12 @@ public class ItemizedLayer extends MarkerLayer listener) { + public void setOnItemGestureListener(OnItemGestureListener listener) { mOnItemGestureListener = listener; } @Override - protected synchronized Item createItem(int index) { + protected synchronized MarkerInterface createItem(int index) { return mItemList.get(index); } @@ -92,24 +87,24 @@ public class ItemizedLayer extends MarkerLayer items) { + public synchronized boolean addItems(Collection items) { final boolean result = mItemList.addAll(items); populate(); return result; } - public synchronized List getItemList() { + public synchronized List getItemList() { return mItemList; } @@ -124,14 +119,14 @@ public class ItemizedLayer extends MarkerLayer extends MarkerLayer that = ItemizedLayer.this; if (mOnItemGestureListener == null) { return false; } - return onSingleTapUpHelper(index, that.mItemList.get(index)); + return onSingleTapUpHelper(index, mItemList.get(index)); } }; - protected boolean onLongPressHelper(int index, Item item) { + protected boolean onLongPressHelper(int index, MarkerInterface item) { return this.mOnItemGestureListener.onItemLongPress(index, item); } private final ActiveItem mActiveItemLongPress = new ActiveItem() { @Override public boolean run(final int index) { - final ItemizedLayer that = ItemizedLayer.this; - if (that.mOnItemGestureListener == null) { + if (mOnItemGestureListener == null) { return false; } - return onLongPressHelper(index, that.mItemList.get(index)); + return onLongPressHelper(index, mItemList.get(index)); } }; @@ -206,7 +199,7 @@ public class ItemizedLayer extends MarkerLayer extends Layer { +public abstract class MarkerLayer extends Layer { protected final MarkerRenderer mMarkerRenderer; - protected Item mFocusedItem; + protected MarkerInterface mFocusedItem; /** * Method by which subclasses create the actual Items. This will only be * called from populate() we'll cache them for later use. */ - protected abstract Item createItem(int i); + protected abstract MarkerInterface createItem(int i); /** * The number of items in this overlay. */ public abstract int size(); - @SuppressWarnings("unchecked") public MarkerLayer(Map map, MarkerSymbol defaultSymbol) { super(map); - mMarkerRenderer = new MarkerRenderer((MarkerLayer) this, defaultSymbol); + mMarkerRenderer = new MarkerRenderer(this, defaultSymbol); mRenderer = mMarkerRenderer; } @@ -85,7 +84,7 @@ public abstract class MarkerLayer extends Layer { * * @param item */ - public synchronized void setFocus(Item item) { + public synchronized void setFocus(MarkerInterface item) { mFocusedItem = item; } @@ -93,7 +92,7 @@ public abstract class MarkerLayer extends Layer { * @return the currently-focused item, or null if no item is currently * focused. */ - public synchronized Item getFocus() { + public synchronized MarkerInterface getFocus() { return mFocusedItem; } diff --git a/vtm/src/org/oscim/layers/marker/MarkerRenderer.java b/vtm/src/org/oscim/layers/marker/MarkerRenderer.java index f75b9cfb..996439c6 100644 --- a/vtm/src/org/oscim/layers/marker/MarkerRenderer.java +++ b/vtm/src/org/oscim/layers/marker/MarkerRenderer.java @@ -39,7 +39,7 @@ public class MarkerRenderer extends BucketRenderer { protected final SymbolBucket mSymbolLayer; protected final float[] mBox = new float[8]; - protected final MarkerLayer mMarkerLayer; + protected final MarkerLayer mMarkerLayer; protected final Point mMapPoint = new Point(); /** @@ -49,7 +49,7 @@ public class MarkerRenderer extends BucketRenderer { protected InternalItem[] mItems; - public MarkerRenderer(MarkerLayer markerLayer, MarkerSymbol defaultSymbol) { + public MarkerRenderer(MarkerLayer markerLayer, MarkerSymbol defaultSymbol) { mSymbolLayer = new SymbolBucket(); mMarkerLayer = markerLayer; mDefaultMarker = defaultSymbol;