В новом API Карт Google для Android мы можем добавить маркер , но нет способа (легко) его удалить.
Мое решение состоит в том, чтобы сохранить маркеры на карте и перерисовать карту, когда я хочу удалить маркер, но он не очень эффективен.
private final Map<String, MarkerOptions> mMarkers = new ConcurrentHashMap<String, MarkerOptions>(); private void add(String name, LatLng ll) { final MarkerOptions marker = new MarkerOptions().position(ll).title(name); mMarkers.put(name, marker); runOnUiThread(new Runnable() { @Override public void run() { mMap.addMarker(marker); } }); } private void remove(String name) { mMarkers.remove(name); runOnUiThread(new Runnable() { @Override public void run() { mMap.clear(); for (MarkerOptions item : mMarkers.values()) { mMap.addMarker(item); } } }); }
Кто-нибудь имеет лучшую идею?
Подпись метода для addMarker
:
public final Marker addMarker (MarkerOptions options)
Поэтому, когда вы добавляете маркер в GoogleMap
, указав параметры маркера, вы должны сохранить возвращаемый объект Marker
(вместо объекта MarkerOptions
который вы использовали для его создания). Этот объект позволяет впоследствии изменить состояние маркера. Когда вы закончите с маркером, вы можете вызвать Marker.remove()
чтобы удалить его с карты.
В стороне, если вы хотите временно скрыть его, вы можете переключить видимость маркера, вызывая Marker.setVisible(boolean)
.
Очистить все каракули на карте
map.clear()
Добавьте маркер на карту следующим образом:
Marker markerName = map.addMarker(new MarkerOptions().position(latLng).title("Title"));
Тогда вы сможете использовать метод remove, он удалит только этот маркер
markerName.remove();
1. Если вы хотите удалить маркер, вы можете сделать это как marker.remove();
В качестве альтернативы вы также можете скрыть маркер, а не удалять его как
marker.setVisible(false);
И сделать его видимым позже, когда это необходимо.
2. Однако если вы хотите удалить все маркеры с карты Используйте map.clear();
Примечание: map.clear();
Также удалит Polylines, Circles
и т. Д.
3. Если вы не хотите удалять Polylines, Circles
и т. Д., Чем использовать цикл для длины маркера (если у вас есть несколько маркеров), чтобы удалить их. Проверьте здесь пример или установите их. Visible false И не используйте map.clear();
в таком случае.
Если маркер существует, удалите последний маркер. Если маркер не существует, создайте текущий маркер
Marker currentMarker = null; if (currentMarker!=null) { currentMarker.remove(); currentMarker=null; } if (currentMarker==null) { currentMarker = mMap.addMarker(new MarkerOptions().position(arg0). icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN))); }
Сделать глобальную переменную для отслеживания маркера
private Marker currentLocationMarker;
// Удаление старого маркера
if (null != currentLocationMarker) { currentLocationMarker.remove(); }
// Добавить обновленный маркер и переместить камеру
currentLocationMarker = mMap.addMarker(new MarkerOptions().position( new LatLng(getLatitude(), getLongitude())) .title("You are now Here").visible(true) .icon(Utils.getMarkerBitmapFromView(getActivity(), R.drawable.auto_front)) .snippet("Updated Location")); currentLocationMarker.showInfoWindow();
Создайте массив со всеми маркерами для добавления в карту.
Позже используйте:
Marker temp = markers.get(markers.size() - 1); temp.remove();