2014-10-04 119 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) 
相关问题