Android Google Map V2: Как изменить значок предыдущего щелчка маркера при нажатии на другой маркер

ОБНОВЛЕНИЕ: я решил проблему с производительностью, добавив объект previousMarker. Таким образом, только предыдущий маркер клика будет удален и заменен значком по умолчанию. Однако, когда я нажимаю на маркер, информационное окно все еще не отображается.


У меня есть вид карты и на нем установлены некоторые маркеры. То, что я хочу, – это когда я нажимал на маркер, он меняет свой значок на другой значок, и когда я нажимаю на другой маркер, значок предыдущего маркера должен быть заменен на исходный.

Я сделал что-то вроде этого, но просто меняет значок маркера всякий раз, когда я нажимаю на маркер.

@Override public boolean onMarkerClick(Marker marker) { //Called when a marker has been clicked or tapped. LatLng markerPos=marker.getPosition(); String markerLocationName=marker.getTitle(); String markerSubCategoryName=marker.getSnippet(); marker.remove(); MarkerOptions markerOptions = new MarkerOptions().position(markerPos) .title(markerLocationName) .snippet(markerSubCategoryName) .icon(BitmapDescriptorFactory.fromResource(R.drawable.new_icon));// Changing marker icon mMap.addMarker(markerOptions); Log.d("marker","change marker icon"); // can open a dialog window here return false; } 

Поэтому, если я нажму 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) }; 

Итак, есть ли способ получить предыдущий маркер, чтобы изменить его значок до значения по умолчанию, когда я нажимаю новый маркер? Извиниться за мой английский, если ты думаешь, что я должен поставить еще один заголовок для моего вопроса, пожалуйста, помогите.

Solutions Collecting From Web of "Android Google Map V2: Как изменить значок предыдущего щелчка маркера при нажатии на другой маркер"

Наконец, я нашел лучший и самый простой способ. Я создал объект 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; } 

Возможно, вы, вероятно, ищите этот метод

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