vog*_*Dev 1 events android click marker mapsforge
我正在使用MapsForge最新分支(master),我想实现Marker的onTap事件.我认为它可能在0.3.0,但我不能使用0.3.0,因为我在地图上为每个标记使用不同的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);
Run Code Online (Sandbox Code Playgroud)
"createCustomMarker"返回一个标记,该标记使用带有数字的Drawable.
任何人都知道如何轻敲"m"的行为?
记住:分公司高手!不是0.3.0 !!
谢谢
Hor*_*mke 10
创建一个继承自Marker并覆盖onTab的类,方法如下.此解决方案检查选项卡是否在Layer的位图范围内(加10%).如果这是真的,将调用Runnable操作.
在Mapsforge中,每个标记只是一个叠加在地图顶部的简单图层.每个选项卡都将调用最顶层的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;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2644 次 |
| 最近记录: |