2014-10-04 52 views
7

更新:我已通過添加previousMarker對象解決了性能問題。因此只有以前點擊過的標記將被刪除並替換爲默認圖標。但是,當我點擊標記時信息窗口仍然不顯示。Android Google Map V2:點擊另一個標記時如何更改之前點擊的標記圖標


我有地圖視圖並設置了一些標記。我想要的是當我點擊一個標記時,它將其圖標更改爲不同的圖標,當我點擊另一個標記時,上一個標記的圖標應該更改爲原始圖標。

我所做的就是這樣,但只要點擊標記就會改變標記圖標。所以如果我點擊2個標記,我會得到2個新的圖標出現,同時我想要的只是當前點擊標記更改其圖標。

所以我也通過添加2行代碼來完成這樣的事情。它成功地做我想做的事情,但它有一些缺點(見下文)。

@Override 
public boolean onMarkerClick(Marker marker) { //Called when a marker has been clicked or tapped. 

    mMap.clear(); 
    populateAllMarkersOnMap();//repopulate markers on map 

    LatLng markerPos=marker.getPosition(); 
    String markerLocationName=marker.getTitle(); 
    String markerSubCategoryName=marker.getSnippet(); 

    marker.remove(); //remove the current clicked marker 

    MarkerOptions markerOptions = 
      new MarkerOptions().position(markerPos) 
        .title(markerLocationName) 
        .snippet(markerSubCategoryName) 
        .icon(BitmapDescriptorFactory.fromResource(R.drawable.new_icon));// Changing marker icon 
    mMap.addMarker(markerOptions); //add marker with new icon into map 
    return false; 
} 

缺點是1 /它「禁用」信息窗口(同樣的事情也發生在第一種方式)。 2 /清除地圖上的所有標記並再次設置所有標記。想象一下,我有100個標記,應該是我每次點擊時的性能問題?

的populateAllMarkersOnMap()可以在此刻簡單是這樣的:

private void populateAllMarkersOnMap(){ 
    setMarker(latA1, lonA1, "A1","A1.1"); 
    setMarker(latA2, lonA2, "A2","A2.1"); 
    // ... (100 times or populated via a loop) 
}; 

那麼,有沒有辦法讓以前被點擊標記以更改其圖標回默認,當我點擊一個新的標誌?爲我的英語道歉,如果你認爲我應該爲我的問題提出另一個標題,請幫助。

+0

你採取什麼'previousMarker'標記爲初始階段? – pRaNaY 2015-11-02 09:36:28

回答

16

最後我找到了最好最簡單的方法。我做了一個previousMarker對象和存儲當前點擊的標記:

@Override 
public boolean onMarkerClick(Marker marker) { //Called when a marker has been clicked or tapped. 
    if(previousMarker!=null){ 
     previousMarker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.dot_icon)); 
    } 
    marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.ct_icon)); 
    previousMarker=marker; //Now the clicked marker becomes previousMarker 
    return false; 
} 
+0

工作過,非常感謝:) – joeabala 2016-10-05 11:59:51

+0

我寫了一些代碼,終於這樣工作,但它出現問題,當我出去回到頁面。我不知道我的代碼有什麼問題 – Ashkan 2017-07-11 08:09:12

0

你可能會找這個方法可能

Called when the marker's info window is closed. 
optional public func mapView(mapView: GMSMapView, didCloseInfoWindowOfMarker marker: GMSMarker) 
相關問題