我正在使用 MapsForge 最新分支(master)并且我想实现一个标记的 onTap 事件。 我认为这在 0.3.0 上是可行的,但我不能使用 0.3.0,因为我为 map 上的每个标记使用不同的 Drawable。
ArrayList<Monument> monuments = getMonuments();
mListOverlay = new ListOverlay();
ArrayList<OverlayItem> markers = new ArrayList<OverlayItem>();
for(Monument m : monuments){
GeoPoint gp = new GeoPoint(m.getLat(), m.getLon());
Marker m = createCustomMarker(R.drawable.marker, gp, p.getNumber()));
markers.add(m);
}
mListOverlay.getOverlayItems().addAll(markers);
mMapView.getOverlays().add(mListOverlay);
“createCustomMarker”返回一个标记,该标记使用顶部带有数字的 Drawable。
有人知道我如何在点击“m”时覆盖它的行为吗?
切记:支主!不是 0.3.0!!
谢谢
最佳答案
创建一个继承自Marker的类并覆盖onTab,方法如下。 此解决方案检查选项卡是否在图层位图的范围内(加上 10%)。 如果为真,将调用 Runnable 操作。
在 Mapsforge 中,每个标记只是一个堆叠在 map 顶部的简单图层。每个tab都会调用最顶层的ontab。如果返回 false,将调用下一个最顶层的 ontab,除非函数返回 true 或已到达最后一层。
public class InfoMarker extends Marker {
private Runnable action;
public InfoMarker(LatLong latLong, org.mapsforge.core.graphics.Bitmap bitmap, int horizontalOffset, int verticalOffset) {
super(latLong, bitmap, horizontalOffset, verticalOffset);
}
public void setOnTabAction(Runnable action){
this.action = action;
}
@Override
public boolean onTap(LatLong tapLatLong, Point layerXY, Point tapXY) {
double centerX = layerXY.x + getHorizontalOffset();
double centerY = layerXY.y + getVerticalOffset();
double radiusX = (getBitmap().getWidth() / 2) *1.1;
double radiusY = (getBitmap().getHeight() / 2) *1.1;
double distX = Math.abs(centerX - tapXY.x);
double distY = Math.abs(centerY - tapXY.y);
if( distX < radiusX && distY < radiusY){
if(action != null){
action.run();
return true;
}
}
return false;
}
}
关于android - MapsForge 0.4.0 : is it possible to implelment a Marker 's onTap event?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21582350/