在android map v2中单击后不要捕捉到标记

时间:2013-01-24 09:19:43

标签: android google-maps android-mapview android-maps-v2

目前,Android Map v2会在点击后捕捉到标记位置。我想禁用此行为,但看不到任何选项。

有人知道如何解决这个问题吗?

2 个答案:

答案 0 :(得分:51)

根据我从Markers中读到的内容 - Google Maps Android API(https://developers.google.com/maps/documentation/android/marker#marker_click_events

  

标记点击事件

     

您可以使用OnMarkerClickListener监听标记上的点击事件。设置       这个监听器在地图上调用GoogleMap.setOnMarkerClickListener(OnMarkerClickListener)。       当用户点击标记时,将调用onMarkerClick(Marker)并且标记将会       作为一个论点传递。此方法返回一个指示是否的布尔值       您已经消耗了该事件(即,您想要禁止默认行为)。如果它       如果返回false,则除了自定义行为外,还会发生默认行为。       标记点击事件的默认行为是显示其信息窗口(如果可用)       然后移动相机,使标记在地图上居中。

您可能会覆盖此方法并让它只打开标记并返回true以使用该事件。

// Since we are consuming the event this is necessary to
// manage closing opened markers before opening new ones
Marker lastOpened = null;

mMap.setOnMarkerClickListener(new OnMarkerClickListener() {
    public boolean onMarkerClick(Marker marker) {
        // Check if there is an open info window
        if (lastOpened != null) {
            // Close the info window
            lastOpened.hideInfoWindow();

            // Is the marker the same marker that was already open
            if (lastOpened.equals(marker)) {
                // Nullify the lastOpened object
                lastOpened = null;
                // Return so that the info window isn't opened again
                return true;
            } 
        }

        // Open the info window for the marker
        marker.showInfoWindow();
        // Re-assign the last opened such that we can close it later
        lastOpened = marker;

        // Event was handled by our code do not launch default behaviour.
        return true;
    }
});

这是未经测试的代码,但这可能是一个可行的解决方案。

谢谢, DMAN

答案 1 :(得分:1)

看来我们应该可以执行以下操作,但由于this bug,它不起作用,因为marker.isInfoWindowShown()始终返回false:

mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
    public boolean onMarkerClick(Marker marker) {
        if (marker.isInfoWindowShown()) {
            marker.hideInfoWindow();
        } else {
            marker.showInfoWindow();
        }
        return true;
    }
});

但是,以下效果相同且有效:

mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {

    Marker currentShown;

    public boolean onMarkerClick(Marker marker) {
        if (marker.equals(currentShown)) {
            marker.hideInfoWindow();
            currentShown = null;
        } else {
            marker.showInfoWindow();
            currentShown = marker;
        }
        return true;
    }
});

因为一次只显示一个信息窗口(如Google Maps API v2 Developer Guide中所述),所以如果点击当前打开信息窗口的标记,我们只需要隐藏信息窗口。