谷歌地图Android在地图上保持标记清除

时间:2015-11-24 08:34:46

标签: android google-maps

我从包含其位置的对象数组中向我的地图添加标记。单击标记时,我希望它显示一个infowindow(它也从包含标记位置的对象数组中获取数据)。

我创建了一个hashmap:

HashMap<String,Marker> hashMarkers = new HashMap<>();

这是我用来添加标记的代码。仅添加中心特定范围内的标记。

for (pointNumber= 0; pointNumber<pointArray.length; pointNumber++) {

                    if (distanceToPointFromCenter<range) {
                                 hashMarkers.put(String.valueOf(pointNumber),
                                mMap.addMarker(new MarkerOptions()
                                        .position(new LatLng(pointArray[pointNumber].latitude, pointArray[pointNumber].longitude))
                                        .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE))
                                        .title("Title: " + pointArray[pointNumber].pointTitle)
                                        .snippet("Snippet: " + pointArray[pointNumber].snippet)));
                    } else {
                        System.out.println("Out of range");
                    }
                }

由于我会有很多标记,因此每次使用mMap.clear();移动相机时都会清除地图并重新绘制标记。

这是我的OnMarkerClickListener:

@Override
public boolean onMarkerClick(Marker selectedMarker) {
    mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
            @Override
            public boolean onMarkerClick(Marker marker) {
                if (marker.equals(hashMarkers.get("the number of the marker"))) {
                    Marker marker = mMap.addMarker(new MarkerOptions()
                .position(selectedMarker.getPosition())
                .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE))
                .title(selectedMarker.getTitle())
                .snippet(selectedMarker.getSnippet()));
                mMap.setInfoWindowAdapter(new CustomWindowAdapter(getLayoutInflater()));
                marker.showInfoWindow();
                    return true;
                } else {
                    return false;
                }
            }
        });
}

当我点击一个标记时,我看到infowindow几毫秒,然后消失。这是因为单击标记时相机会刷新。

我尝试在OnMarkerClick中重新创建标记及其infowindow(如上所示),但它不起作用。

我有什么方法可以

  1. 仅阻止我点击的标记被清除,或

  2. 重绘我点击的标记并显示其信息窗

  3. 如果这是一个糟糕的问题,我很抱歉,但我对编程(和StackOverflow)很陌生。 任何给予的帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

在从地图中清除标记后,将代码重绘为标记。您可以使用gloabal变量中的属性保存单击标记的位置。

修改

@Override
public boolean onMarkerClick(Marker selectedMarker) {
    mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
            @Override
            public boolean onMarkerClick(Marker marker) {
                    savedPosition=selectedMarker.getPosition();
                    savedTitle=selectedMarker.getTitle();
                    savedSnippet=selectedMarker.getSnippet();
                  // anything else part of your code..
             }
        });
}

在map.clear()之后添加以下内容:

if(savedPosition!=null && savedTitle!=null && savedSnippet!=null){
    Marker marker = mMap.addMarker(new MarkerOptions()
                    .position(savedPosition)
                    .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE))
                    .title(savedTitle)
                    .snippet(savedSnippet));

                    marker.showInfoWindow();
}