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.backend.canvas.Paint;
|
||||||
import org.oscim.core.GeoPoint;
|
import org.oscim.core.GeoPoint;
|
||||||
import org.oscim.layers.marker.ItemizedLayer;
|
import org.oscim.layers.marker.ItemizedLayer;
|
||||||
|
import org.oscim.layers.marker.MarkerInterface;
|
||||||
import org.oscim.layers.marker.MarkerItem;
|
import org.oscim.layers.marker.MarkerItem;
|
||||||
import org.oscim.layers.marker.MarkerSymbol;
|
import org.oscim.layers.marker.MarkerSymbol;
|
||||||
import org.oscim.layers.marker.MarkerSymbol.HotspotPlace;
|
import org.oscim.layers.marker.MarkerSymbol.HotspotPlace;
|
||||||
@ -66,7 +67,7 @@ public class AtlasMultiTextureActivity extends MarkerOverlayActivity {
|
|||||||
paint.setTextSize(12 * CanvasAdapter.getScale());
|
paint.setTextSize(12 * CanvasAdapter.getScale());
|
||||||
paint.setStrokeWidth(2 * CanvasAdapter.getScale());
|
paint.setStrokeWidth(2 * CanvasAdapter.getScale());
|
||||||
paint.setColor(Color.BLACK);
|
paint.setColor(Color.BLACK);
|
||||||
List<MarkerItem> pts = new ArrayList<>();
|
List<MarkerInterface> pts = new ArrayList<>();
|
||||||
for (double lat = -90; lat <= 90; lat += 10) {
|
for (double lat = -90; lat <= 90; lat += 10) {
|
||||||
for (double lon = -180; lon <= 180; lon += 10) {
|
for (double lon = -180; lon <= 180; lon += 10) {
|
||||||
String title = lat + "/" + lon;
|
String title = lat + "/" + lon;
|
||||||
@ -86,29 +87,32 @@ public class AtlasMultiTextureActivity extends MarkerOverlayActivity {
|
|||||||
// With iOS we must flip the Y-Axis
|
// With iOS we must flip the Y-Axis
|
||||||
TextureAtlasUtils.createTextureRegions(inputMap, regionsMap, atlasList, true, false);
|
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);
|
mMap.layers().add(mMarkerLayer);
|
||||||
|
|
||||||
mMarkerLayer.addItems(pts);
|
mMarkerLayer.addItems(pts);
|
||||||
|
|
||||||
// set all markers
|
// set all markers
|
||||||
for (MarkerItem item : pts) {
|
for (MarkerInterface item : pts) {
|
||||||
MarkerSymbol markerSymbol = new MarkerSymbol(regionsMap.get(item.getTitle()), HotspotPlace.BOTTOM_CENTER);
|
MarkerItem markerItem = (MarkerItem) item;
|
||||||
item.setMarker(markerSymbol);
|
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();
|
Toast.makeText(this, "Atlas count: " + atlasList.size(), Toast.LENGTH_SHORT).show();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onItemSingleTapUp(int index, MarkerItem item) {
|
public boolean onItemSingleTapUp(int index, MarkerInterface item) {
|
||||||
Toast.makeText(this, "Marker tap\n" + item.getTitle(), Toast.LENGTH_SHORT).show();
|
MarkerItem markerItem = (MarkerItem) item;
|
||||||
|
Toast.makeText(this, "Marker tap\n" + markerItem.getTitle(), Toast.LENGTH_SHORT).show();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onItemLongPress(int index, MarkerItem item) {
|
public boolean onItemLongPress(int index, MarkerInterface item) {
|
||||||
Toast.makeText(this, "Marker long press\n" + item.getTitle(), Toast.LENGTH_SHORT).show();
|
MarkerItem markerItem = (MarkerItem) item;
|
||||||
|
Toast.makeText(this, "Marker long press\n" + markerItem.getTitle(), Toast.LENGTH_SHORT).show();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -65,15 +65,15 @@ public class ClusterMarkerOverlayActivity extends MarkerOverlayActivity {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
mMarkerLayer = new ItemizedLayer<>(
|
mMarkerLayer = new ItemizedLayer(
|
||||||
mMap,
|
mMap,
|
||||||
new ArrayList<MarkerItem>(),
|
new ArrayList<MarkerInterface>(),
|
||||||
markerRendererFactory,
|
markerRendererFactory,
|
||||||
this);
|
this);
|
||||||
mMap.layers().add(mMarkerLayer);
|
mMap.layers().add(mMarkerLayer);
|
||||||
|
|
||||||
// Create some markers spaced STEP degrees
|
// Create some markers spaced STEP degrees
|
||||||
List<MarkerItem> pts = new ArrayList<>();
|
List<MarkerInterface> pts = new ArrayList<>();
|
||||||
mMap.setMapPosition(53.08, 8.83, 1 << 15);
|
mMap.setMapPosition(53.08, 8.83, 1 << 15);
|
||||||
GeoPoint center = mMap.getMapPosition().getGeoPoint();
|
GeoPoint center = mMap.getMapPosition().getGeoPoint();
|
||||||
for (int x = -COUNT; x < COUNT; x++) {
|
for (int x = -COUNT; x < COUNT; x++) {
|
||||||
|
@ -28,6 +28,7 @@ import org.oscim.event.GestureListener;
|
|||||||
import org.oscim.event.MotionEvent;
|
import org.oscim.event.MotionEvent;
|
||||||
import org.oscim.layers.Layer;
|
import org.oscim.layers.Layer;
|
||||||
import org.oscim.layers.marker.ItemizedLayer;
|
import org.oscim.layers.marker.ItemizedLayer;
|
||||||
|
import org.oscim.layers.marker.MarkerInterface;
|
||||||
import org.oscim.layers.marker.MarkerItem;
|
import org.oscim.layers.marker.MarkerItem;
|
||||||
import org.oscim.layers.marker.MarkerSymbol;
|
import org.oscim.layers.marker.MarkerSymbol;
|
||||||
import org.oscim.layers.marker.MarkerSymbol.HotspotPlace;
|
import org.oscim.layers.marker.MarkerSymbol.HotspotPlace;
|
||||||
@ -41,12 +42,11 @@ import java.util.ArrayList;
|
|||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class MarkerOverlayActivity extends MapActivity
|
public class MarkerOverlayActivity extends MapActivity implements ItemizedLayer.OnItemGestureListener<MarkerInterface> {
|
||||||
implements ItemizedLayer.OnItemGestureListener<MarkerItem> {
|
|
||||||
|
|
||||||
static final boolean BILLBOARDS = true;
|
static final boolean BILLBOARDS = true;
|
||||||
MarkerSymbol mFocusMarker;
|
MarkerSymbol mFocusMarker;
|
||||||
ItemizedLayer<MarkerItem> mMarkerLayer;
|
ItemizedLayer mMarkerLayer;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
@ -78,10 +78,10 @@ public class MarkerOverlayActivity extends MapActivity
|
|||||||
else
|
else
|
||||||
mFocusMarker = new MarkerSymbol(bitmapFocus, HotspotPlace.CENTER, false);
|
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);
|
mMap.layers().add(mMarkerLayer);
|
||||||
|
|
||||||
List<MarkerItem> pts = new ArrayList<>();
|
List<MarkerInterface> pts = new ArrayList<>();
|
||||||
|
|
||||||
for (double lat = -90; lat <= 90; lat += 5) {
|
for (double lat = -90; lat <= 90; lat += 5) {
|
||||||
for (double lon = -180; lon <= 180; lon += 5)
|
for (double lon = -180; lon <= 180; lon += 5)
|
||||||
@ -100,24 +100,26 @@ public class MarkerOverlayActivity extends MapActivity
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onItemSingleTapUp(int index, MarkerItem item) {
|
public boolean onItemSingleTapUp(int index, MarkerInterface item) {
|
||||||
if (item.getMarker() == null)
|
MarkerItem markerItem = (MarkerItem) item;
|
||||||
item.setMarker(mFocusMarker);
|
if (markerItem.getMarker() == null)
|
||||||
|
markerItem.setMarker(mFocusMarker);
|
||||||
else
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onItemLongPress(int index, MarkerItem item) {
|
public boolean onItemLongPress(int index, MarkerInterface item) {
|
||||||
if (item.getMarker() == null)
|
MarkerItem markerItem = (MarkerItem) item;
|
||||||
item.setMarker(mFocusMarker);
|
if (markerItem.getMarker() == null)
|
||||||
|
markerItem.setMarker(mFocusMarker);
|
||||||
else
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2017-2019 devemux86
|
* Copyright 2017-2020 devemux86
|
||||||
* Copyright 2018 Gustl22
|
* Copyright 2018 Gustl22
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify it under the
|
* 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.event.MotionEvent;
|
||||||
import org.oscim.layers.Layer;
|
import org.oscim.layers.Layer;
|
||||||
import org.oscim.layers.marker.ItemizedLayer;
|
import org.oscim.layers.marker.ItemizedLayer;
|
||||||
|
import org.oscim.layers.marker.MarkerInterface;
|
||||||
import org.oscim.layers.marker.MarkerItem;
|
import org.oscim.layers.marker.MarkerItem;
|
||||||
import org.oscim.layers.marker.MarkerSymbol;
|
import org.oscim.layers.marker.MarkerSymbol;
|
||||||
import org.oscim.map.Map;
|
import org.oscim.map.Map;
|
||||||
@ -57,14 +58,14 @@ import java.util.List;
|
|||||||
* Long press on map to search inside visible bounding box.<br/>
|
* Long press on map to search inside visible bounding box.<br/>
|
||||||
* Tap on POIs to show their name (in default locale).
|
* 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 Logger log = LoggerFactory.getLogger(PoiSearchActivity.class);
|
||||||
|
|
||||||
private static final String POI_CATEGORY = "Restaurants";
|
private static final String POI_CATEGORY = "Restaurants";
|
||||||
private static final int SELECT_POI_FILE = MapsforgeActivity.SELECT_THEME_FILE + 1;
|
private static final int SELECT_POI_FILE = MapsforgeActivity.SELECT_THEME_FILE + 1;
|
||||||
|
|
||||||
private ItemizedLayer<MarkerItem> mMarkerLayer;
|
private ItemizedLayer mMarkerLayer;
|
||||||
private PoiPersistenceManager mPersistenceManager;
|
private PoiPersistenceManager mPersistenceManager;
|
||||||
|
|
||||||
public static class PoiFilePicker extends FilePicker {
|
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));
|
Bitmap bitmap = new AndroidBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.marker_green));
|
||||||
MarkerSymbol symbol = new MarkerSymbol(bitmap, MarkerSymbol.HotspotPlace.BOTTOM_CENTER);
|
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);
|
mMap.layers().add(mMarkerLayer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onItemSingleTapUp(int index, MarkerItem item) {
|
public boolean onItemSingleTapUp(int index, MarkerInterface item) {
|
||||||
Toast.makeText(this, item.getTitle(), Toast.LENGTH_SHORT).show();
|
MarkerItem markerItem = (MarkerItem) item;
|
||||||
|
Toast.makeText(this, markerItem.getTitle(), Toast.LENGTH_SHORT).show();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onItemLongPress(int index, MarkerItem item) {
|
public boolean onItemLongPress(int index, MarkerInterface item) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -315,7 +317,7 @@ public class PoiSearchActivity extends MapsforgeActivity implements ItemizedLaye
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Overlay POI
|
// Overlay POI
|
||||||
List<MarkerItem> pts = new ArrayList<>();
|
List<MarkerInterface> pts = new ArrayList<>();
|
||||||
for (PointOfInterest pointOfInterest : pointOfInterests)
|
for (PointOfInterest pointOfInterest : pointOfInterests)
|
||||||
pts.add(new MarkerItem(pointOfInterest.getName(), "", new GeoPoint(pointOfInterest.getLatitude(), pointOfInterest.getLongitude())));
|
pts.add(new MarkerItem(pointOfInterest.getName(), "", new GeoPoint(pointOfInterest.getLatitude(), pointOfInterest.getLongitude())));
|
||||||
mMarkerLayer.addItems(pts);
|
mMarkerLayer.addItems(pts);
|
||||||
|
@ -23,19 +23,14 @@ import android.view.View;
|
|||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import org.oscim.android.canvas.AndroidGraphics;
|
import org.oscim.android.canvas.AndroidGraphics;
|
||||||
import org.oscim.core.BoundingBox;
|
import org.oscim.core.BoundingBox;
|
||||||
import org.oscim.core.GeoPoint;
|
import org.oscim.core.GeoPoint;
|
||||||
|
import org.oscim.layers.marker.MarkerInterface;
|
||||||
import org.oscim.layers.marker.MarkerSymbol;
|
import org.oscim.layers.marker.MarkerSymbol;
|
||||||
import org.oscim.layers.marker.MarkerSymbol.HotspotPlace;
|
import org.oscim.layers.marker.MarkerSymbol.HotspotPlace;
|
||||||
import org.oscim.map.Map;
|
import org.oscim.map.Map;
|
||||||
import org.osmdroid.location.FlickrPOIProvider;
|
import org.osmdroid.location.*;
|
||||||
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.overlays.DefaultInfoWindow;
|
import org.osmdroid.overlays.DefaultInfoWindow;
|
||||||
import org.osmdroid.overlays.ExtendedMarkerItem;
|
import org.osmdroid.overlays.ExtendedMarkerItem;
|
||||||
import org.osmdroid.overlays.ItemizedOverlayWithBubble;
|
import org.osmdroid.overlays.ItemizedOverlayWithBubble;
|
||||||
@ -45,7 +40,7 @@ import java.util.List;
|
|||||||
|
|
||||||
public class POISearch {
|
public class POISearch {
|
||||||
private final ArrayList<POI> mPOIs;
|
private final ArrayList<POI> mPOIs;
|
||||||
ItemizedOverlayWithBubble<ExtendedMarkerItem> poiMarkers;
|
ItemizedOverlayWithBubble poiMarkers;
|
||||||
MarkerSymbol[] mMarkers;
|
MarkerSymbol[] mMarkers;
|
||||||
|
|
||||||
private static final int MDEFAULT = 0;
|
private static final int MDEFAULT = 0;
|
||||||
@ -57,9 +52,9 @@ public class POISearch {
|
|||||||
POISearch() {
|
POISearch() {
|
||||||
mPOIs = new ArrayList<POI>();
|
mPOIs = new ArrayList<POI>();
|
||||||
//POI markers:
|
//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,
|
App.activity,
|
||||||
null,
|
null,
|
||||||
poiItems,
|
poiItems,
|
||||||
|
@ -24,10 +24,10 @@ import android.widget.Button;
|
|||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.RelativeLayout;
|
import android.widget.RelativeLayout;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import org.oscim.android.canvas.AndroidGraphics;
|
import org.oscim.android.canvas.AndroidGraphics;
|
||||||
import org.oscim.core.GeoPoint;
|
import org.oscim.core.GeoPoint;
|
||||||
import org.oscim.layers.PathLayer;
|
import org.oscim.layers.PathLayer;
|
||||||
|
import org.oscim.layers.marker.MarkerInterface;
|
||||||
import org.oscim.layers.marker.MarkerSymbol;
|
import org.oscim.layers.marker.MarkerSymbol;
|
||||||
import org.oscim.layers.marker.MarkerSymbol.HotspotPlace;
|
import org.oscim.layers.marker.MarkerSymbol.HotspotPlace;
|
||||||
import org.osmdroid.location.GeocoderNominatim;
|
import org.osmdroid.location.GeocoderNominatim;
|
||||||
@ -48,7 +48,7 @@ public class RouteSearch {
|
|||||||
|
|
||||||
private final PathLayer mRouteOverlay;
|
private final PathLayer mRouteOverlay;
|
||||||
//private final ItemizedOverlayWithBubble<ExtendedOverlayItem> mRouteMarkers;
|
//private final ItemizedOverlayWithBubble<ExtendedOverlayItem> mRouteMarkers;
|
||||||
private final ItemizedOverlayWithBubble<ExtendedMarkerItem> mItineraryMarkers;
|
private final ItemizedOverlayWithBubble mItineraryMarkers;
|
||||||
|
|
||||||
private final RouteBar mRouteBar;
|
private final RouteBar mRouteBar;
|
||||||
|
|
||||||
@ -63,9 +63,9 @@ public class RouteSearch {
|
|||||||
mViaPoints = new ArrayList<GeoPoint>();
|
mViaPoints = new ArrayList<GeoPoint>();
|
||||||
|
|
||||||
// Itinerary markers:
|
// 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,
|
App.activity,
|
||||||
null,
|
null,
|
||||||
waypointsItems,
|
waypointsItems,
|
||||||
|
@ -2,7 +2,6 @@ package org.osmdroid.overlays;
|
|||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import org.oscim.app.App;
|
import org.oscim.app.App;
|
||||||
import org.oscim.core.GeoPoint;
|
import org.oscim.core.GeoPoint;
|
||||||
import org.oscim.core.MapPosition;
|
import org.oscim.core.MapPosition;
|
||||||
@ -10,6 +9,7 @@ import org.oscim.core.Point;
|
|||||||
import org.oscim.event.Event;
|
import org.oscim.event.Event;
|
||||||
import org.oscim.event.MotionEvent;
|
import org.oscim.event.MotionEvent;
|
||||||
import org.oscim.layers.marker.ItemizedLayer;
|
import org.oscim.layers.marker.ItemizedLayer;
|
||||||
|
import org.oscim.layers.marker.MarkerInterface;
|
||||||
import org.oscim.layers.marker.MarkerItem;
|
import org.oscim.layers.marker.MarkerItem;
|
||||||
import org.oscim.layers.marker.MarkerSymbol;
|
import org.oscim.layers.marker.MarkerSymbol;
|
||||||
import org.oscim.map.Map;
|
import org.oscim.map.Map;
|
||||||
@ -22,14 +22,12 @@ import java.util.List;
|
|||||||
* taps on an overlay item, and displays item attributes. <br>
|
* taps on an overlay item, and displays item attributes. <br>
|
||||||
* Items must be ExtendedMarkerItem. <br>
|
* Items must be ExtendedMarkerItem. <br>
|
||||||
*
|
*
|
||||||
* @param <Item> ...
|
|
||||||
* @author M.Kergall
|
* @author M.Kergall
|
||||||
* @see ExtendedMarkerItem
|
* @see ExtendedMarkerItem
|
||||||
* @see InfoWindow
|
* @see InfoWindow
|
||||||
*/
|
*/
|
||||||
public class ItemizedOverlayWithBubble<Item extends MarkerItem> extends
|
public class ItemizedOverlayWithBubble extends ItemizedLayer
|
||||||
ItemizedLayer<Item> implements
|
implements ItemizedLayer.OnItemGestureListener<MarkerInterface>, Map.UpdateListener {
|
||||||
ItemizedLayer.OnItemGestureListener<Item>, Map.UpdateListener {
|
|
||||||
|
|
||||||
/* only one for all items of this overlay => one at a time */
|
/* only one for all items of this overlay => one at a time */
|
||||||
protected InfoWindow mBubble;
|
protected InfoWindow mBubble;
|
||||||
@ -40,7 +38,7 @@ public class ItemizedOverlayWithBubble<Item extends MarkerItem> extends
|
|||||||
static int layoutResId = 0;
|
static int layoutResId = 0;
|
||||||
|
|
||||||
public ItemizedOverlayWithBubble(Map map, Context context,
|
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);
|
super(map, list, marker, null);
|
||||||
|
|
||||||
if (bubble != null) {
|
if (bubble != null) {
|
||||||
@ -66,12 +64,12 @@ public class ItemizedOverlayWithBubble<Item extends MarkerItem> extends
|
|||||||
}
|
}
|
||||||
|
|
||||||
public ItemizedOverlayWithBubble(Map map, Context context,
|
public ItemizedOverlayWithBubble(Map map, Context context,
|
||||||
MarkerSymbol marker, List<Item> aList) {
|
MarkerSymbol marker, List<MarkerInterface> aList) {
|
||||||
this(map, context, marker, aList, null);
|
this(map, context, marker, aList, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onItemLongPress(int index, MarkerItem item) {
|
public boolean onItemLongPress(int index, MarkerInterface item) {
|
||||||
if (mBubble.isOpen())
|
if (mBubble.isOpen())
|
||||||
hideBubble();
|
hideBubble();
|
||||||
else
|
else
|
||||||
@ -80,7 +78,7 @@ public class ItemizedOverlayWithBubble<Item extends MarkerItem> extends
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onItemSingleTapUp(int index, MarkerItem item) {
|
public boolean onItemSingleTapUp(int index, MarkerInterface item) {
|
||||||
showBubble(index);
|
showBubble(index);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -121,7 +119,6 @@ public class ItemizedOverlayWithBubble<Item extends MarkerItem> extends
|
|||||||
*
|
*
|
||||||
* @param index of the overlay item to show
|
* @param index of the overlay item to show
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
public void showBubbleOnItem(int index) {
|
public void showBubbleOnItem(int index) {
|
||||||
ExtendedMarkerItem item = (ExtendedMarkerItem) (mItemList.get(index));
|
ExtendedMarkerItem item = (ExtendedMarkerItem) (mItemList.get(index));
|
||||||
mItemWithBubble = item;
|
mItemWithBubble = item;
|
||||||
@ -131,7 +128,7 @@ public class ItemizedOverlayWithBubble<Item extends MarkerItem> extends
|
|||||||
mMap.animator().animateTo(item.geoPoint);
|
mMap.animator().animateTo(item.geoPoint);
|
||||||
|
|
||||||
mMap.updateMap(true);
|
mMap.updateMap(true);
|
||||||
setFocus((Item) item);
|
setFocus(item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -179,7 +176,7 @@ public class ItemizedOverlayWithBubble<Item extends MarkerItem> extends
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public synchronized boolean removeItem(final Item item) {
|
public synchronized boolean removeItem(final MarkerInterface item) {
|
||||||
boolean result = super.removeItem(item);
|
boolean result = super.removeItem(item);
|
||||||
if (mItemWithBubble == item) {
|
if (mItemWithBubble == item) {
|
||||||
hideBubble();
|
hideBubble();
|
||||||
|
@ -23,6 +23,7 @@ import org.oscim.backend.canvas.Paint;
|
|||||||
import org.oscim.core.GeoPoint;
|
import org.oscim.core.GeoPoint;
|
||||||
import org.oscim.gdx.GdxMapApp;
|
import org.oscim.gdx.GdxMapApp;
|
||||||
import org.oscim.layers.marker.ItemizedLayer;
|
import org.oscim.layers.marker.ItemizedLayer;
|
||||||
|
import org.oscim.layers.marker.MarkerInterface;
|
||||||
import org.oscim.layers.marker.MarkerItem;
|
import org.oscim.layers.marker.MarkerItem;
|
||||||
import org.oscim.layers.marker.MarkerSymbol;
|
import org.oscim.layers.marker.MarkerSymbol;
|
||||||
import org.oscim.layers.tile.bitmap.BitmapTileLayer;
|
import org.oscim.layers.tile.bitmap.BitmapTileLayer;
|
||||||
@ -66,7 +67,7 @@ public class AtlasMultiTextureTest extends MarkerLayerTest {
|
|||||||
paint.setTextSize(12);
|
paint.setTextSize(12);
|
||||||
paint.setStrokeWidth(2);
|
paint.setStrokeWidth(2);
|
||||||
paint.setColor(Color.BLACK);
|
paint.setColor(Color.BLACK);
|
||||||
List<MarkerItem> pts = new ArrayList<>();
|
List<MarkerInterface> pts = new ArrayList<>();
|
||||||
for (double lat = -90; lat <= 90; lat += 5) {
|
for (double lat = -90; lat <= 90; lat += 5) {
|
||||||
for (double lon = -180; lon <= 180; lon += 5) {
|
for (double lon = -180; lon <= 180; lon += 5) {
|
||||||
String title = lat + "/" + lon;
|
String title = lat + "/" + lon;
|
||||||
@ -86,29 +87,32 @@ public class AtlasMultiTextureTest extends MarkerLayerTest {
|
|||||||
// With iOS we must flip the Y-Axis
|
// With iOS we must flip the Y-Axis
|
||||||
TextureAtlasUtils.createTextureRegions(inputMap, regionsMap, atlasList, true, false);
|
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);
|
mMap.layers().add(mMarkerLayer);
|
||||||
|
|
||||||
mMarkerLayer.addItems(pts);
|
mMarkerLayer.addItems(pts);
|
||||||
|
|
||||||
// set all markers
|
// set all markers
|
||||||
for (MarkerItem item : pts) {
|
for (MarkerInterface item : pts) {
|
||||||
MarkerSymbol markerSymbol = new MarkerSymbol(regionsMap.get(item.getTitle()), HotspotPlace.BOTTOM_CENTER);
|
MarkerItem markerItem = (MarkerItem) item;
|
||||||
item.setMarker(markerSymbol);
|
MarkerSymbol markerSymbol = new MarkerSymbol(regionsMap.get(markerItem.getTitle()), HotspotPlace.BOTTOM_CENTER);
|
||||||
|
markerItem.setMarker(markerSymbol);
|
||||||
}
|
}
|
||||||
|
|
||||||
System.out.println("Atlas count: " + atlasList.size());
|
System.out.println("Atlas count: " + atlasList.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onItemSingleTapUp(int index, MarkerItem item) {
|
public boolean onItemSingleTapUp(int index, MarkerInterface item) {
|
||||||
System.out.println("Marker tap " + item.getTitle());
|
MarkerItem markerItem = (MarkerItem) item;
|
||||||
|
System.out.println("Marker tap " + markerItem.getTitle());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onItemLongPress(int index, MarkerItem item) {
|
public boolean onItemLongPress(int index, MarkerInterface item) {
|
||||||
System.out.println("Marker long press " + item.getTitle());
|
MarkerItem markerItem = (MarkerItem) item;
|
||||||
|
System.out.println("Marker long press " + markerItem.getTitle());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -69,15 +69,15 @@ public class ClusterMarkerLayerTest extends MarkerLayerTest {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
mMarkerLayer = new ItemizedLayer<>(
|
mMarkerLayer = new ItemizedLayer(
|
||||||
mMap,
|
mMap,
|
||||||
new ArrayList<MarkerItem>(),
|
new ArrayList<MarkerInterface>(),
|
||||||
markerRendererFactory,
|
markerRendererFactory,
|
||||||
this);
|
this);
|
||||||
mMap.layers().add(mMarkerLayer);
|
mMap.layers().add(mMarkerLayer);
|
||||||
|
|
||||||
// Create some markers spaced STEP degrees
|
// Create some markers spaced STEP degrees
|
||||||
List<MarkerItem> pts = new ArrayList<>();
|
List<MarkerInterface> pts = new ArrayList<>();
|
||||||
GeoPoint center = mMap.getMapPosition().getGeoPoint();
|
GeoPoint center = mMap.getMapPosition().getGeoPoint();
|
||||||
for (int x = -COUNT; x < COUNT; x++) {
|
for (int x = -COUNT; x < COUNT; x++) {
|
||||||
for (int y = -COUNT; y < COUNT; y++) {
|
for (int y = -COUNT; y < COUNT; y++) {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2016-2018 devemux86
|
* Copyright 2016-2020 devemux86
|
||||||
* Copyright 2019 telemaxx
|
* Copyright 2019 telemaxx
|
||||||
*
|
*
|
||||||
* This program is free software: you can redistribute it and/or modify it under the
|
* 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.gdx.GdxMapApp;
|
||||||
import org.oscim.layers.Layer;
|
import org.oscim.layers.Layer;
|
||||||
import org.oscim.layers.marker.ItemizedLayer;
|
import org.oscim.layers.marker.ItemizedLayer;
|
||||||
|
import org.oscim.layers.marker.MarkerInterface;
|
||||||
import org.oscim.layers.marker.MarkerItem;
|
import org.oscim.layers.marker.MarkerItem;
|
||||||
import org.oscim.layers.marker.MarkerSymbol;
|
import org.oscim.layers.marker.MarkerSymbol;
|
||||||
import org.oscim.layers.tile.vector.VectorTileLayer;
|
import org.oscim.layers.tile.vector.VectorTileLayer;
|
||||||
@ -41,7 +42,7 @@ import java.util.List;
|
|||||||
|
|
||||||
import static org.oscim.layers.marker.MarkerSymbol.HotspotPlace;
|
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 FG_COLOR = 0xFF000000; // 100 percent black. AARRGGBB
|
||||||
private static final int BG_COLOR = 0x80FF69B4; // 50 percent pink. 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"));
|
//Bitmap bitmapPoi = CanvasAdapter.decodeBitmap(getClass().getResourceAsStream("/res/marker_poi2.png"));
|
||||||
MarkerSymbol symbol = new MarkerSymbol(bitmapPoi, HotspotPlace.CENTER, false);
|
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);
|
mMap.layers().add(markerLayer);
|
||||||
|
|
||||||
// creating some poi's
|
// 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("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("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)));
|
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"
|
+ "is drawn on the map\n"
|
||||||
+ "the rest is surpressed", new GeoPoint(52.509352, 13.375739)));
|
+ "the rest is surpressed", new GeoPoint(52.509352, 13.375739)));
|
||||||
|
|
||||||
for (MarkerItem mi : pts) {
|
for (MarkerInterface mi : pts) {
|
||||||
System.out.println("title: " + mi.title);
|
MarkerItem markerItem = (MarkerItem) mi;
|
||||||
mi.setMarker(createAdvancedSymbol(mi, bitmapPoi));
|
System.out.println("title: " + markerItem.title);
|
||||||
|
markerItem.setMarker(createAdvancedSymbol(markerItem, bitmapPoi));
|
||||||
}
|
}
|
||||||
|
|
||||||
markerLayer.addItems(pts);
|
markerLayer.addItems(pts);
|
||||||
@ -198,14 +200,16 @@ public class MarkerLayerLabelsTest extends GdxMapApp implements ItemizedLayer.On
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onItemSingleTapUp(int index, MarkerItem item) {
|
public boolean onItemSingleTapUp(int index, MarkerInterface item) {
|
||||||
System.out.println("Marker tap " + item.getTitle());
|
MarkerItem markerItem = (MarkerItem) item;
|
||||||
|
System.out.println("Marker tap " + markerItem.getTitle());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onItemLongPress(int index, MarkerItem item) {
|
public boolean onItemLongPress(int index, MarkerInterface item) {
|
||||||
System.out.println("Marker long press " + item.getTitle());
|
MarkerItem markerItem = (MarkerItem) item;
|
||||||
|
System.out.println("Marker long press " + markerItem.getTitle());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,6 +23,7 @@ import org.oscim.event.MotionEvent;
|
|||||||
import org.oscim.gdx.GdxMapApp;
|
import org.oscim.gdx.GdxMapApp;
|
||||||
import org.oscim.layers.Layer;
|
import org.oscim.layers.Layer;
|
||||||
import org.oscim.layers.marker.ItemizedLayer;
|
import org.oscim.layers.marker.ItemizedLayer;
|
||||||
|
import org.oscim.layers.marker.MarkerInterface;
|
||||||
import org.oscim.layers.marker.MarkerItem;
|
import org.oscim.layers.marker.MarkerItem;
|
||||||
import org.oscim.layers.marker.MarkerSymbol;
|
import org.oscim.layers.marker.MarkerSymbol;
|
||||||
import org.oscim.layers.tile.bitmap.BitmapTileLayer;
|
import org.oscim.layers.tile.bitmap.BitmapTileLayer;
|
||||||
@ -38,11 +39,11 @@ import java.util.List;
|
|||||||
|
|
||||||
import static org.oscim.layers.marker.MarkerSymbol.HotspotPlace;
|
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;
|
static final boolean BILLBOARDS = true;
|
||||||
MarkerSymbol mFocusMarker;
|
MarkerSymbol mFocusMarker;
|
||||||
ItemizedLayer<MarkerItem> mMarkerLayer;
|
ItemizedLayer mMarkerLayer;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void createLayers() {
|
public void createLayers() {
|
||||||
@ -71,10 +72,10 @@ public class MarkerLayerTest extends GdxMapApp implements ItemizedLayer.OnItemGe
|
|||||||
else
|
else
|
||||||
mFocusMarker = new MarkerSymbol(bitmapFocus, HotspotPlace.CENTER, false);
|
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);
|
mMap.layers().add(mMarkerLayer);
|
||||||
|
|
||||||
List<MarkerItem> pts = new ArrayList<>();
|
List<MarkerInterface> pts = new ArrayList<>();
|
||||||
for (double lat = -90; lat <= 90; lat += 5) {
|
for (double lat = -90; lat <= 90; lat += 5) {
|
||||||
for (double lon = -180; lon <= 180; lon += 5)
|
for (double lon = -180; lon <= 180; lon += 5)
|
||||||
pts.add(new MarkerItem(lat + "/" + lon, "", new GeoPoint(lat, lon)));
|
pts.add(new MarkerItem(lat + "/" + lon, "", new GeoPoint(lat, lon)));
|
||||||
@ -86,24 +87,26 @@ public class MarkerLayerTest extends GdxMapApp implements ItemizedLayer.OnItemGe
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onItemSingleTapUp(int index, MarkerItem item) {
|
public boolean onItemSingleTapUp(int index, MarkerInterface item) {
|
||||||
if (item.getMarker() == null)
|
MarkerItem markerItem = (MarkerItem) item;
|
||||||
item.setMarker(mFocusMarker);
|
if (markerItem.getMarker() == null)
|
||||||
|
markerItem.setMarker(mFocusMarker);
|
||||||
else
|
else
|
||||||
item.setMarker(null);
|
markerItem.setMarker(null);
|
||||||
|
|
||||||
System.out.println("Marker tap " + item.getTitle());
|
System.out.println("Marker tap " + markerItem.getTitle());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onItemLongPress(int index, MarkerItem item) {
|
public boolean onItemLongPress(int index, MarkerInterface item) {
|
||||||
if (item.getMarker() == null)
|
MarkerItem markerItem = (MarkerItem) item;
|
||||||
item.setMarker(mFocusMarker);
|
if (markerItem.getMarker() == null)
|
||||||
|
markerItem.setMarker(mFocusMarker);
|
||||||
else
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -98,7 +98,7 @@ public class ClusterMarkerRenderer extends MarkerRenderer {
|
|||||||
* @param defaultSymbol The default symbol
|
* @param defaultSymbol The default symbol
|
||||||
* @param style The desired style, or NULL to disable clustering
|
* @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);
|
super(markerLayer, defaultSymbol);
|
||||||
|
|
||||||
mClusteringEnabled = style != null;
|
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 */
|
/* 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);
|
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);
|
final double factor = (scale / GRIDSIZE);
|
||||||
|
|
||||||
InternalItem.Clustered[] tmp = new InternalItem.Clustered[size];
|
InternalItem.Clustered[] tmp = new InternalItem.Clustered[size];
|
||||||
@ -154,7 +154,7 @@ public class ClusterMarkerRenderer extends MarkerRenderer {
|
|||||||
|
|
||||||
it.item = mMarkerLayer.createItem(i);
|
it.item = mMarkerLayer.createItem(i);
|
||||||
|
|
||||||
/* pre-project points */
|
/* pre-project points */
|
||||||
MercatorProjection.project(it.item.getPoint(), mMapPoint);
|
MercatorProjection.project(it.item.getPoint(), mMapPoint);
|
||||||
it.px = mMapPoint.x;
|
it.px = mMapPoint.x;
|
||||||
it.py = mMapPoint.y;
|
it.py = mMapPoint.y;
|
||||||
@ -260,7 +260,7 @@ public class ClusterMarkerRenderer extends MarkerRenderer {
|
|||||||
float cos = (float) Math.cos(angle);
|
float cos = (float) Math.cos(angle);
|
||||||
float sin = (float) Math.sin(angle);
|
float sin = (float) Math.sin(angle);
|
||||||
|
|
||||||
/* check visibility */
|
/* check visibility */
|
||||||
for (InternalItem itm : mItems) {
|
for (InternalItem itm : mItems) {
|
||||||
InternalItem.Clustered it = (InternalItem.Clustered) itm;
|
InternalItem.Clustered it = (InternalItem.Clustered) itm;
|
||||||
|
|
||||||
@ -299,7 +299,7 @@ public class ClusterMarkerRenderer extends MarkerRenderer {
|
|||||||
|
|
||||||
//log.debug(numVisible + " " + changedVisible + " " + changesInvisible);
|
//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 */
|
* or more than 10 of the current items became invisible */
|
||||||
//if ((numVisible == 0) && (changedVisible == 0 && changesInvisible < 10))
|
//if ((numVisible == 0) && (changedVisible == 0 && changesInvisible < 10))
|
||||||
// return;
|
// return;
|
||||||
|
@ -31,30 +31,25 @@ import org.oscim.event.GestureListener;
|
|||||||
import org.oscim.event.MotionEvent;
|
import org.oscim.event.MotionEvent;
|
||||||
import org.oscim.map.Map;
|
import org.oscim.map.Map;
|
||||||
import org.oscim.map.Viewport;
|
import org.oscim.map.Viewport;
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class ItemizedLayer<Item extends MarkerInterface> extends MarkerLayer<Item>
|
public class ItemizedLayer extends MarkerLayer implements GestureListener {
|
||||||
implements GestureListener {
|
|
||||||
|
|
||||||
static final Logger log = LoggerFactory.getLogger(ItemizedLayer.class);
|
protected final List<MarkerInterface> mItemList;
|
||||||
|
|
||||||
protected final List<Item> mItemList;
|
|
||||||
protected final Point mTmpPoint = new Point();
|
protected final Point mTmpPoint = new Point();
|
||||||
protected OnItemGestureListener<Item> mOnItemGestureListener;
|
protected OnItemGestureListener<MarkerInterface> mOnItemGestureListener;
|
||||||
protected int mDrawnItemsLimit = Integer.MAX_VALUE;
|
protected int mDrawnItemsLimit = Integer.MAX_VALUE;
|
||||||
|
|
||||||
public ItemizedLayer(Map map, MarkerSymbol defaultMarker) {
|
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,
|
MarkerSymbol defaultMarker,
|
||||||
OnItemGestureListener<Item> listener) {
|
OnItemGestureListener<MarkerInterface> listener) {
|
||||||
|
|
||||||
super(map, defaultMarker);
|
super(map, defaultMarker);
|
||||||
|
|
||||||
@ -64,12 +59,12 @@ public class ItemizedLayer<Item extends MarkerInterface> extends MarkerLayer<Ite
|
|||||||
}
|
}
|
||||||
|
|
||||||
public ItemizedLayer(Map map, MarkerRendererFactory markerRendererFactory) {
|
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,
|
MarkerRendererFactory markerRendererFactory,
|
||||||
OnItemGestureListener<Item> listener) {
|
OnItemGestureListener<MarkerInterface> listener) {
|
||||||
|
|
||||||
super(map, markerRendererFactory);
|
super(map, markerRendererFactory);
|
||||||
|
|
||||||
@ -78,12 +73,12 @@ public class ItemizedLayer<Item extends MarkerInterface> extends MarkerLayer<Ite
|
|||||||
populate();
|
populate();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setOnItemGestureListener(OnItemGestureListener<Item> listener) {
|
public void setOnItemGestureListener(OnItemGestureListener<MarkerInterface> listener) {
|
||||||
mOnItemGestureListener = listener;
|
mOnItemGestureListener = listener;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected synchronized Item createItem(int index) {
|
protected synchronized MarkerInterface createItem(int index) {
|
||||||
return mItemList.get(index);
|
return mItemList.get(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -92,24 +87,24 @@ public class ItemizedLayer<Item extends MarkerInterface> extends MarkerLayer<Ite
|
|||||||
return Math.min(mItemList.size(), mDrawnItemsLimit);
|
return Math.min(mItemList.size(), mDrawnItemsLimit);
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized boolean addItem(Item item) {
|
public synchronized boolean addItem(MarkerInterface item) {
|
||||||
final boolean result = mItemList.add(item);
|
final boolean result = mItemList.add(item);
|
||||||
populate();
|
populate();
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void addItem(int location, Item item) {
|
public synchronized void addItem(int location, MarkerInterface item) {
|
||||||
mItemList.add(location, item);
|
mItemList.add(location, item);
|
||||||
populate();
|
populate();
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized boolean addItems(Collection<Item> items) {
|
public synchronized boolean addItems(Collection<MarkerInterface> items) {
|
||||||
final boolean result = mItemList.addAll(items);
|
final boolean result = mItemList.addAll(items);
|
||||||
populate();
|
populate();
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized List<Item> getItemList() {
|
public synchronized List<MarkerInterface> getItemList() {
|
||||||
return mItemList;
|
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);
|
final boolean result = mItemList.remove(item);
|
||||||
populate();
|
populate();
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized Item removeItem(int position) {
|
public synchronized MarkerInterface removeItem(int position) {
|
||||||
final Item result = mItemList.remove(position);
|
final MarkerInterface result = mItemList.remove(position);
|
||||||
populate();
|
populate();
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -147,33 +142,31 @@ public class ItemizedLayer<Item extends MarkerInterface> extends MarkerLayer<Ite
|
|||||||
// public boolean onTap(MotionEvent event, MapPosition pos) {
|
// public boolean onTap(MotionEvent event, MapPosition pos) {
|
||||||
// return activateSelectedItems(event, mActiveItemSingleTap);
|
// return activateSelectedItems(event, mActiveItemSingleTap);
|
||||||
// }
|
// }
|
||||||
protected boolean onSingleTapUpHelper(int index, Item item) {
|
protected boolean onSingleTapUpHelper(int index, MarkerInterface item) {
|
||||||
return mOnItemGestureListener.onItemSingleTapUp(index, item);
|
return mOnItemGestureListener.onItemSingleTapUp(index, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
private final ActiveItem mActiveItemSingleTap = new ActiveItem() {
|
private final ActiveItem mActiveItemSingleTap = new ActiveItem() {
|
||||||
@Override
|
@Override
|
||||||
public boolean run(int index) {
|
public boolean run(int index) {
|
||||||
final ItemizedLayer<Item> that = ItemizedLayer.this;
|
|
||||||
if (mOnItemGestureListener == null) {
|
if (mOnItemGestureListener == null) {
|
||||||
return false;
|
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);
|
return this.mOnItemGestureListener.onItemLongPress(index, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
private final ActiveItem mActiveItemLongPress = new ActiveItem() {
|
private final ActiveItem mActiveItemLongPress = new ActiveItem() {
|
||||||
@Override
|
@Override
|
||||||
public boolean run(final int index) {
|
public boolean run(final int index) {
|
||||||
final ItemizedLayer<Item> that = ItemizedLayer.this;
|
if (mOnItemGestureListener == null) {
|
||||||
if (that.mOnItemGestureListener == null) {
|
|
||||||
return false;
|
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());
|
double dist = (20 * CanvasAdapter.getScale()) * (20 * CanvasAdapter.getScale());
|
||||||
|
|
||||||
for (int i = 0; i < size; i++) {
|
for (int i = 0; i < size; i++) {
|
||||||
Item item = mItemList.get(i);
|
MarkerInterface item = mItemList.get(i);
|
||||||
|
|
||||||
if (!box.contains(item.getPoint().longitudeE6,
|
if (!box.contains(item.getPoint().longitudeE6,
|
||||||
item.getPoint().latitudeE6))
|
item.getPoint().latitudeE6))
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
*
|
*
|
||||||
* Copyright 2013 Hannes Janetzek
|
* Copyright 2013 Hannes Janetzek
|
||||||
* Copyright 2016 Stephan Leuschner
|
* Copyright 2016 Stephan Leuschner
|
||||||
* Copyright 2016-2018 devemux86
|
* Copyright 2016-2020 devemux86
|
||||||
* Copyright 2017 Longri
|
* Copyright 2017 Longri
|
||||||
*
|
*
|
||||||
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
|
* 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
|
* gets checked for onTap first. This class is generic, because you then you get
|
||||||
* your custom item-class passed back in onTap(). << TODO
|
* 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 final MarkerRenderer mMarkerRenderer;
|
||||||
protected Item mFocusedItem;
|
protected MarkerInterface mFocusedItem;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Method by which subclasses create the actual Items. This will only be
|
* Method by which subclasses create the actual Items. This will only be
|
||||||
* called from populate() we'll cache them for later use.
|
* 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.
|
* The number of items in this overlay.
|
||||||
*/
|
*/
|
||||||
public abstract int size();
|
public abstract int size();
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
public MarkerLayer(Map map, MarkerSymbol defaultSymbol) {
|
public MarkerLayer(Map map, MarkerSymbol defaultSymbol) {
|
||||||
super(map);
|
super(map);
|
||||||
|
|
||||||
mMarkerRenderer = new MarkerRenderer((MarkerLayer<MarkerInterface>) this, defaultSymbol);
|
mMarkerRenderer = new MarkerRenderer(this, defaultSymbol);
|
||||||
mRenderer = mMarkerRenderer;
|
mRenderer = mMarkerRenderer;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -85,7 +84,7 @@ public abstract class MarkerLayer<Item extends MarkerInterface> extends Layer {
|
|||||||
*
|
*
|
||||||
* @param item
|
* @param item
|
||||||
*/
|
*/
|
||||||
public synchronized void setFocus(Item item) {
|
public synchronized void setFocus(MarkerInterface item) {
|
||||||
mFocusedItem = 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
|
* @return the currently-focused item, or null if no item is currently
|
||||||
* focused.
|
* focused.
|
||||||
*/
|
*/
|
||||||
public synchronized Item getFocus() {
|
public synchronized MarkerInterface getFocus() {
|
||||||
return mFocusedItem;
|
return mFocusedItem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@ public class MarkerRenderer extends BucketRenderer {
|
|||||||
|
|
||||||
protected final SymbolBucket mSymbolLayer;
|
protected final SymbolBucket mSymbolLayer;
|
||||||
protected final float[] mBox = new float[8];
|
protected final float[] mBox = new float[8];
|
||||||
protected final MarkerLayer<MarkerInterface> mMarkerLayer;
|
protected final MarkerLayer mMarkerLayer;
|
||||||
protected final Point mMapPoint = new Point();
|
protected final Point mMapPoint = new Point();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -49,7 +49,7 @@ public class MarkerRenderer extends BucketRenderer {
|
|||||||
|
|
||||||
protected InternalItem[] mItems;
|
protected InternalItem[] mItems;
|
||||||
|
|
||||||
public MarkerRenderer(MarkerLayer<MarkerInterface> markerLayer, MarkerSymbol defaultSymbol) {
|
public MarkerRenderer(MarkerLayer markerLayer, MarkerSymbol defaultSymbol) {
|
||||||
mSymbolLayer = new SymbolBucket();
|
mSymbolLayer = new SymbolBucket();
|
||||||
mMarkerLayer = markerLayer;
|
mMarkerLayer = markerLayer;
|
||||||
mDefaultMarker = defaultSymbol;
|
mDefaultMarker = defaultSymbol;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user