More mutable itemized layer
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user