Intereting Posts
Можно автозаполнять EditTextPreference? Не удалось открыть устройство HAX! HAX не работает, и эмулятор запускается в эмуляторе режима эмуляции Тревога установки Android на прошлую дату Android Realm copyToRealmOrUpdate создает дубликаты вложенных объектов Добавить фильтры в видео, такие как Instagram Невозможно запустить активность – время уничтожения активности для истории Теоретический вопрос: загрузить внешний файл XML-Layout в Android Как извлечь текст из выбранного элемента в listView Как динамически устанавливать заголовки в Retrofit (Android) Возможно ли передать пользовательский аргумент на рынок Android, чтобы мое приложение получало его при первом запуске? Android Swipe Отключение нескольких элементов для RecyclerView Получить номер версии WebView для леденца? Искать все вхождения строки во всем проекте в Android Studio Как я могу профилировать приложение для Android? ViewPager PagerObserver не зарегистрирован

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)