android - MapsForge 0.4.0 : is it possible to implelment a Marker 's onTap event?

标签 android events click marker mapsforge

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

相关文章:

Android 版本依赖编译

javascript - javascript 中具有自定义触发器的自定义事件

javascript - iPadOS 14 Apple Pencil 快速点击不起作用。 - HTML JavaScript ontouchstart/onpointerdown

events - AppleScript 在鼠标位置单击

android - 具有一行而不是两行文本的线性布局中按钮的奇怪行为

android - 左侧为 Listview,右侧为 tabhost,带有 20 :80 screen sharing ratio

google-chrome - 自动多重下载不再适用于 Chrome

javascript - Jquery:我如何不选择特定的列

android - 在 Android NDK 上通过 JNI 从 OpenGL ES 帧缓冲区创建位图图像

c++ - 确定场景何时在 Maya 中完成加载