More mutable itemized layer
This commit is contained in:
parent
4604f07042
commit
2d64186a1a
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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++) {
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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,
|
||||
|
@ -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,
|
||||
|
@ -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();
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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++) {
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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))
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user