More mutable itemized layer

This commit is contained in:
Emux
2020-04-27 21:22:27 +03:00
parent 4604f07042
commit 2d64186a1a
15 changed files with 147 additions and 144 deletions

View File

@@ -98,7 +98,7 @@ public class ClusterMarkerRenderer extends MarkerRenderer {
* @param defaultSymbol The default symbol
* @param style The desired style, or NULL to disable clustering
*/
public ClusterMarkerRenderer(MarkerLayer<MarkerInterface> markerLayer, MarkerSymbol defaultSymbol, ClusterMarkerRenderer.ClusterStyle style) {
public ClusterMarkerRenderer(MarkerLayer markerLayer, MarkerSymbol defaultSymbol, ClusterMarkerRenderer.ClusterStyle style) {
super(markerLayer, defaultSymbol);
mClusteringEnabled = style != null;
@@ -141,7 +141,7 @@ public class ClusterMarkerRenderer extends MarkerRenderer {
/* the grid slot size in px. increase to group more aggressively. currently set to marker size */
final int GRIDSIZE = ScreenUtils.getPixels(MAP_GRID_SIZE_DP);
/* the factor to map into Grid Coordinates (discrete squares of GRIDSIZE x GRIDSIZE) */
/* the factor to map into Grid Coordinates (discrete squares of GRIDSIZE x GRIDSIZE) */
final double factor = (scale / GRIDSIZE);
InternalItem.Clustered[] tmp = new InternalItem.Clustered[size];
@@ -154,7 +154,7 @@ public class ClusterMarkerRenderer extends MarkerRenderer {
it.item = mMarkerLayer.createItem(i);
/* pre-project points */
/* pre-project points */
MercatorProjection.project(it.item.getPoint(), mMapPoint);
it.px = mMapPoint.x;
it.py = mMapPoint.y;
@@ -260,7 +260,7 @@ public class ClusterMarkerRenderer extends MarkerRenderer {
float cos = (float) Math.cos(angle);
float sin = (float) Math.sin(angle);
/* check visibility */
/* check visibility */
for (InternalItem itm : mItems) {
InternalItem.Clustered it = (InternalItem.Clustered) itm;
@@ -299,7 +299,7 @@ public class ClusterMarkerRenderer extends MarkerRenderer {
//log.debug(numVisible + " " + changedVisible + " " + changesInvisible);
/* only update when zoomlevel changed, new items are visible
/* only update when zoomlevel changed, new items are visible
* or more than 10 of the current items became invisible */
//if ((numVisible == 0) && (changedVisible == 0 && changesInvisible < 10))
// return;

View File

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

View File

@@ -6,7 +6,7 @@
*
* Copyright 2013 Hannes Janetzek
* Copyright 2016 Stephan Leuschner
* Copyright 2016-2018 devemux86
* Copyright 2016-2020 devemux86
* Copyright 2017 Longri
*
* This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
@@ -34,27 +34,26 @@ import org.oscim.map.Map;
* gets checked for onTap first. This class is generic, because you then you get
* your custom item-class passed back in onTap(). << TODO
*/
public abstract class MarkerLayer<Item extends MarkerInterface> extends Layer {
public abstract class MarkerLayer extends Layer {
protected final MarkerRenderer mMarkerRenderer;
protected Item mFocusedItem;
protected MarkerInterface mFocusedItem;
/**
* Method by which subclasses create the actual Items. This will only be
* called from populate() we'll cache them for later use.
*/
protected abstract Item createItem(int i);
protected abstract MarkerInterface createItem(int i);
/**
* The number of items in this overlay.
*/
public abstract int size();
@SuppressWarnings("unchecked")
public MarkerLayer(Map map, MarkerSymbol defaultSymbol) {
super(map);
mMarkerRenderer = new MarkerRenderer((MarkerLayer<MarkerInterface>) this, defaultSymbol);
mMarkerRenderer = new MarkerRenderer(this, defaultSymbol);
mRenderer = mMarkerRenderer;
}
@@ -85,7 +84,7 @@ public abstract class MarkerLayer<Item extends MarkerInterface> extends Layer {
*
* @param item
*/
public synchronized void setFocus(Item item) {
public synchronized void setFocus(MarkerInterface item) {
mFocusedItem = item;
}
@@ -93,7 +92,7 @@ public abstract class MarkerLayer<Item extends MarkerInterface> extends Layer {
* @return the currently-focused item, or null if no item is currently
* focused.
*/
public synchronized Item getFocus() {
public synchronized MarkerInterface getFocus() {
return mFocusedItem;
}

View File

@@ -39,7 +39,7 @@ public class MarkerRenderer extends BucketRenderer {
protected final SymbolBucket mSymbolLayer;
protected final float[] mBox = new float[8];
protected final MarkerLayer<MarkerInterface> mMarkerLayer;
protected final MarkerLayer mMarkerLayer;
protected final Point mMapPoint = new Point();
/**
@@ -49,7 +49,7 @@ public class MarkerRenderer extends BucketRenderer {
protected InternalItem[] mItems;
public MarkerRenderer(MarkerLayer<MarkerInterface> markerLayer, MarkerSymbol defaultSymbol) {
public MarkerRenderer(MarkerLayer markerLayer, MarkerSymbol defaultSymbol) {
mSymbolLayer = new SymbolBucket();
mMarkerLayer = markerLayer;
mDefaultMarker = defaultSymbol;