More mutable itemized layer

This commit is contained in:
Emux 2020-04-27 21:22:27 +03:00
parent 4604f07042
commit 2d64186a1a
No known key found for this signature in database
GPG Key ID: 64ED9980896038C3
15 changed files with 147 additions and 144 deletions

View File

@ -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<MarkerItem> pts = new ArrayList<>();
List<MarkerInterface> 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<MarkerItem>(), (MarkerSymbol) null, this);
mMarkerLayer = new ItemizedLayer(mMap, new ArrayList<MarkerInterface>(), (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;
}
}

View File

@ -65,15 +65,15 @@ public class ClusterMarkerOverlayActivity extends MarkerOverlayActivity {
};
}
};
mMarkerLayer = new ItemizedLayer<>(
mMarkerLayer = new ItemizedLayer(
mMap,
new ArrayList<MarkerItem>(),
new ArrayList<MarkerInterface>(),
markerRendererFactory,
this);
mMap.layers().add(mMarkerLayer);
// Create some markers spaced STEP degrees
List<MarkerItem> pts = new ArrayList<>();
List<MarkerInterface> pts = new ArrayList<>();
mMap.setMapPosition(53.08, 8.83, 1 << 15);
GeoPoint center = mMap.getMapPosition().getGeoPoint();
for (int x = -COUNT; x < COUNT; x++) {

View File

@ -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<MarkerItem> {
public class MarkerOverlayActivity extends MapActivity implements ItemizedLayer.OnItemGestureListener<MarkerInterface> {
static final boolean BILLBOARDS = true;
MarkerSymbol mFocusMarker;
ItemizedLayer<MarkerItem> 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<MarkerItem>(), symbol, this);
mMarkerLayer = new ItemizedLayer(mMap, new ArrayList<MarkerInterface>(), symbol, this);
mMap.layers().add(mMarkerLayer);
List<MarkerItem> pts = new ArrayList<>();
List<MarkerInterface> 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;
}

View File

@ -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.<br/>
* Tap on POIs to show their name (in default locale).
*/
public class PoiSearchActivity extends MapsforgeActivity implements ItemizedLayer.OnItemGestureListener<MarkerItem> {
public class PoiSearchActivity extends MapsforgeActivity implements ItemizedLayer.OnItemGestureListener<MarkerInterface> {
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<MarkerItem> 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<MarkerItem>(), symbol, this);
mMarkerLayer = new ItemizedLayer(mMap, new ArrayList<MarkerInterface>(), 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<MarkerItem> pts = new ArrayList<>();
List<MarkerInterface> pts = new ArrayList<>();
for (PointOfInterest pointOfInterest : pointOfInterests)
pts.add(new MarkerItem(pointOfInterest.getName(), "", new GeoPoint(pointOfInterest.getLatitude(), pointOfInterest.getLongitude())));
mMarkerLayer.addItems(pts);

View File

@ -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<POI> mPOIs;
ItemizedOverlayWithBubble<ExtendedMarkerItem> poiMarkers;
ItemizedOverlayWithBubble poiMarkers;
MarkerSymbol[] mMarkers;
private static final int MDEFAULT = 0;
@ -57,9 +52,9 @@ public class POISearch {
POISearch() {
mPOIs = new ArrayList<POI>();
//POI markers:
final ArrayList<ExtendedMarkerItem> poiItems = new ArrayList<ExtendedMarkerItem>();
final ArrayList<MarkerInterface> poiItems = new ArrayList<>();
poiMarkers = new ItemizedOverlayWithBubble<ExtendedMarkerItem>(App.map,
poiMarkers = new ItemizedOverlayWithBubble(App.map,
App.activity,
null,
poiItems,

View File

@ -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<ExtendedOverlayItem> mRouteMarkers;
private final ItemizedOverlayWithBubble<ExtendedMarkerItem> mItineraryMarkers;
private final ItemizedOverlayWithBubble mItineraryMarkers;
private final RouteBar mRouteBar;
@ -63,9 +63,9 @@ public class RouteSearch {
mViaPoints = new ArrayList<GeoPoint>();
// Itinerary markers:
ArrayList<ExtendedMarkerItem> waypointsItems = new ArrayList<ExtendedMarkerItem>();
ArrayList<MarkerInterface> waypointsItems = new ArrayList<>();
mItineraryMarkers = new ItemizedOverlayWithBubble<ExtendedMarkerItem>(App.map,
mItineraryMarkers = new ItemizedOverlayWithBubble(App.map,
App.activity,
null,
waypointsItems,

View File

@ -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. <br>
* Items must be ExtendedMarkerItem. <br>
*
* @param <Item> ...
* @author M.Kergall
* @see ExtendedMarkerItem
* @see InfoWindow
*/
public class ItemizedOverlayWithBubble<Item extends MarkerItem> extends
ItemizedLayer<Item> implements
ItemizedLayer.OnItemGestureListener<Item>, Map.UpdateListener {
public class ItemizedOverlayWithBubble extends ItemizedLayer
implements ItemizedLayer.OnItemGestureListener<MarkerInterface>, Map.UpdateListener {
/* only one for all items of this overlay => one at a time */
protected InfoWindow mBubble;
@ -40,7 +38,7 @@ public class ItemizedOverlayWithBubble<Item extends MarkerItem> extends
static int layoutResId = 0;
public ItemizedOverlayWithBubble(Map map, Context context,
MarkerSymbol marker, List<Item> list, InfoWindow bubble) {
MarkerSymbol marker, List<MarkerInterface> list, InfoWindow bubble) {
super(map, list, marker, null);
if (bubble != null) {
@ -66,12 +64,12 @@ public class ItemizedOverlayWithBubble<Item extends MarkerItem> extends
}
public ItemizedOverlayWithBubble(Map map, Context context,
MarkerSymbol marker, List<Item> aList) {
MarkerSymbol marker, List<MarkerInterface> 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<Item extends MarkerItem> 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<Item extends MarkerItem> 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<Item extends MarkerItem> extends
mMap.animator().animateTo(item.geoPoint);
mMap.updateMap(true);
setFocus((Item) item);
setFocus(item);
}
}
@ -179,7 +176,7 @@ public class ItemizedOverlayWithBubble<Item extends MarkerItem> 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();

View File

@ -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<MarkerItem> pts = new ArrayList<>();
List<MarkerInterface> 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<MarkerItem>(), (MarkerSymbol) null, this);
mMarkerLayer = new ItemizedLayer(mMap, new ArrayList<MarkerInterface>(), (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;
}

View File

@ -69,15 +69,15 @@ public class ClusterMarkerLayerTest extends MarkerLayerTest {
};
}
};
mMarkerLayer = new ItemizedLayer<>(
mMarkerLayer = new ItemizedLayer(
mMap,
new ArrayList<MarkerItem>(),
new ArrayList<MarkerInterface>(),
markerRendererFactory,
this);
mMap.layers().add(mMarkerLayer);
// Create some markers spaced STEP degrees
List<MarkerItem> pts = new ArrayList<>();
List<MarkerInterface> pts = new ArrayList<>();
GeoPoint center = mMap.getMapPosition().getGeoPoint();
for (int x = -COUNT; x < COUNT; x++) {
for (int y = -COUNT; y < COUNT; y++) {

View File

@ -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<MarkerItem> {
public class MarkerLayerLabelsTest extends GdxMapApp implements ItemizedLayer.OnItemGestureListener<MarkerInterface> {
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<MarkerItem> markerLayer = new ItemizedLayer<>(mMap, new ArrayList<MarkerItem>(), symbol, this);
ItemizedLayer markerLayer = new ItemizedLayer(mMap, new ArrayList<MarkerInterface>(), symbol, this);
mMap.layers().add(markerLayer);
// creating some poi's
List<MarkerItem> pts = new ArrayList<>();
List<MarkerInterface> 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;
}

View File

@ -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<MarkerItem> {
public class MarkerLayerTest extends GdxMapApp implements ItemizedLayer.OnItemGestureListener<MarkerInterface> {
static final boolean BILLBOARDS = true;
MarkerSymbol mFocusMarker;
ItemizedLayer<MarkerItem> 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<MarkerItem>(), symbol, this);
mMarkerLayer = new ItemizedLayer(mMap, new ArrayList<MarkerInterface>(), symbol, this);
mMap.layers().add(mMarkerLayer);
List<MarkerItem> pts = new ArrayList<>();
List<MarkerInterface> 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;
}

View File

@ -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<MarkerInterface> 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;

View File

@ -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<Item extends MarkerInterface> extends MarkerLayer<Item>
implements GestureListener {
public class ItemizedLayer extends MarkerLayer implements GestureListener {
static final Logger log = LoggerFactory.getLogger(ItemizedLayer.class);
protected final List<Item> mItemList;
protected final List<MarkerInterface> mItemList;
protected final Point mTmpPoint = new Point();
protected OnItemGestureListener<Item> mOnItemGestureListener;
protected OnItemGestureListener<MarkerInterface> mOnItemGestureListener;
protected int mDrawnItemsLimit = Integer.MAX_VALUE;
public ItemizedLayer(Map map, MarkerSymbol defaultMarker) {
this(map, new ArrayList<Item>(), defaultMarker, null);
this(map, new ArrayList<MarkerInterface>(), defaultMarker, null);
}
public ItemizedLayer(Map map, List<Item> list,
public ItemizedLayer(Map map, List<MarkerInterface> list,
MarkerSymbol defaultMarker,
OnItemGestureListener<Item> listener) {
OnItemGestureListener<MarkerInterface> listener) {
super(map, defaultMarker);
@ -64,12 +59,12 @@ public class ItemizedLayer<Item extends MarkerInterface> extends MarkerLayer<Ite
}
public ItemizedLayer(Map map, MarkerRendererFactory markerRendererFactory) {
this(map, new ArrayList<Item>(), markerRendererFactory, null);
this(map, new ArrayList<MarkerInterface>(), markerRendererFactory, null);
}
public ItemizedLayer(Map map, List<Item> list,
public ItemizedLayer(Map map, List<MarkerInterface> list,
MarkerRendererFactory markerRendererFactory,
OnItemGestureListener<Item> listener) {
OnItemGestureListener<MarkerInterface> listener) {
super(map, markerRendererFactory);
@ -78,12 +73,12 @@ public class ItemizedLayer<Item extends MarkerInterface> extends MarkerLayer<Ite
populate();
}
public void setOnItemGestureListener(OnItemGestureListener<Item> listener) {
public void setOnItemGestureListener(OnItemGestureListener<MarkerInterface> 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<Item extends MarkerInterface> extends MarkerLayer<Ite
return Math.min(mItemList.size(), mDrawnItemsLimit);
}
public synchronized boolean addItem(Item item) {
public synchronized boolean addItem(MarkerInterface item) {
final boolean result = mItemList.add(item);
populate();
return result;
}
public synchronized void addItem(int location, Item item) {
public synchronized void addItem(int location, MarkerInterface item) {
mItemList.add(location, item);
populate();
}
public synchronized boolean addItems(Collection<Item> items) {
public synchronized boolean addItems(Collection<MarkerInterface> items) {
final boolean result = mItemList.addAll(items);
populate();
return result;
}
public synchronized List<Item> getItemList() {
public synchronized List<MarkerInterface> getItemList() {
return mItemList;
}
@ -124,14 +119,14 @@ public class ItemizedLayer<Item extends MarkerInterface> extends MarkerLayer<Ite
}
}
public synchronized boolean removeItem(Item item) {
public synchronized boolean removeItem(MarkerInterface item) {
final boolean result = mItemList.remove(item);
populate();
return result;
}
public synchronized Item removeItem(int position) {
final Item result = mItemList.remove(position);
public synchronized MarkerInterface removeItem(int position) {
final MarkerInterface result = mItemList.remove(position);
populate();
return result;
}
@ -147,33 +142,31 @@ public class ItemizedLayer<Item extends MarkerInterface> extends MarkerLayer<Ite
// public boolean onTap(MotionEvent event, MapPosition pos) {
// return activateSelectedItems(event, mActiveItemSingleTap);
// }
protected boolean onSingleTapUpHelper(int index, Item item) {
protected boolean onSingleTapUpHelper(int index, MarkerInterface item) {
return mOnItemGestureListener.onItemSingleTapUp(index, item);
}
private final ActiveItem mActiveItemSingleTap = new ActiveItem() {
@Override
public boolean run(int index) {
final ItemizedLayer<Item> 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<Item> 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<Item extends MarkerInterface> extends MarkerLayer<Ite
double dist = (20 * CanvasAdapter.getScale()) * (20 * CanvasAdapter.getScale());
for (int i = 0; i < size; i++) {
Item item = mItemList.get(i);
MarkerInterface item = mItemList.get(i);
if (!box.contains(item.getPoint().longitudeE6,
item.getPoint().latitudeE6))

View File

@ -6,7 +6,7 @@
*
* Copyright 2013 Hannes Janetzek
* Copyright 2016 Stephan Leuschner
* Copyright 2016-2018 devemux86
* Copyright 2016-2020 devemux86
* Copyright 2017 Longri
*
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
@ -34,27 +34,26 @@ import org.oscim.map.Map;
* gets checked for onTap first. This class is generic, because you then you get
* your custom item-class passed back in onTap(). << TODO
*/
public abstract class MarkerLayer<Item extends MarkerInterface> 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<MarkerInterface>) this, defaultSymbol);
mMarkerRenderer = new MarkerRenderer(this, defaultSymbol);
mRenderer = mMarkerRenderer;
}
@ -85,7 +84,7 @@ public abstract class MarkerLayer<Item extends MarkerInterface> 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<Item extends MarkerInterface> 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;
}

View File

@ -39,7 +39,7 @@ public class MarkerRenderer extends BucketRenderer {
protected final SymbolBucket mSymbolLayer;
protected final float[] mBox = new float[8];
protected final MarkerLayer<MarkerInterface> 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<MarkerInterface> markerLayer, MarkerSymbol defaultSymbol) {
public MarkerRenderer(MarkerLayer markerLayer, MarkerSymbol defaultSymbol) {
mSymbolLayer = new SymbolBucket();
mMarkerLayer = markerLayer;
mDefaultMarker = defaultSymbol;