我正在使用Mapsforge最新分支(Master),我想实现标记的ONTAP事件。我认为在0.3.0上可以使用0.3.0,因为我在地图上使用的每个标记都使用了不同的绘制。
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"返回一个标记,该标记使用可绘制的标记,上面有一个数字。
任何人都知道我如何挖掘" M"的行为?
记住:分支主!不是0.3.0 !!
谢谢
创建一个从标记和覆盖ontab继承的类,以下方式。该解决方案检查选项卡是否在图层位图的范围内(加上10%)。如果这是正确的,则可以调用可运行的动作。
在mapsforge中,每个标记只是一个简单的层,它堆叠在地图顶部。每个选项卡将调用最上层的ONTAB。如果返回false,则将调用下一个最上层的ONTAB,除非返回的函数或已达到最后一层。
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;
}
}
可能关注的人,我终于切换到了osmdroid,可以很容易地满足我的需求。
对于Ontap One,我基本上所做的是:
http://mobiledevstories.wordpress.com/2014/03/01/osmdroid-bonus-pack-markers-with-clickable-infowindows/
希望它能节省某个时间!