MapsForge 0.4.0:是否可以实现标记的onTap事件?



我正在使用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/

希望它能节省某个时间!

相关内容

  • 没有找到相关文章