2015-11-24 64 views
-1

我從包含其位置的對象數組向我的地圖添加標記。點擊一個標記時,我希望它顯示一個infowindow(它也從包含標記位置的對象數組中獲取其數據)。Google Maps Android在地圖上保留標記清除

我已經創建了一個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; 
       } 
      } 
     }); 
} 

當我點擊一個標誌,我看到信息窗口在幾毫秒內,它消失之前。發生這種情況是因爲點擊標記時刷新了相機。

我試圖重新創建標記及其內部OnMarkerClick信息窗口(如上所示),但它不工作。

有沒有什麼辦法。我在

  1. 只防止我被清除點擊標記,或

  2. 重繪我點擊標記並顯示其信息窗口

對不起,如果這是一個不好的問題,但我很新的編程(和StackOverflow)。 任何幫助將不勝感激。

+0

你應該用'marker.remove()刪除特定的標記;' –

+0

謝謝,但我想刪除所有的標記_except_那個特定的標記。 – AJDFHLOef

回答

1

把你的代碼清除map.You標記後,可以節省點擊標記與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(); 
} 
+0

標記被清除後重繪。問題是,當我點擊一個標記來查看其infowindow時,攝像機會移動,因此,標記會被移除並重新繪製。發生這種情況時,infowindow也會被刪除。 我可以保存標記的位置,但我將不得不再次使用保存的數據繪製。你能幫我解決嗎? 感謝 – AJDFHLOef

+0

看到edit.You代碼就可以用它來與信息窗口重繪標誌。 –

相關問題