1

我正在使用 MapsForge 最新分支(主),我想实现一个标记的 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);

“createCustomMarker”返回一个标记,该标记使用顶部带有数字的 Drawable。

任何人都知道我如何在“m”被点击时覆盖它的行为?

记住:分支大师!不是0.3.0!!

谢谢

4

2 回答 2

10

创建一个继承自 Marker 的类并覆盖 onTab,方法如下。此解决方案检查选项卡是否在图层位图的范围内(加上 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;
    }

}
于 2014-06-11T14:53:18.267 回答
1

对于它可能关心的人,我终于改用 OsmDroid,它可以轻松满足我的需求。

对于onTap,我所做的基本上是:

http://mobiledevstories.wordpress.com/2014/03/01/osmdroid-bonus-pack-markers-with-clickable-infowindows/

希望它可以为某人节省时间!

于 2014-03-01T12:45:42.743 回答