Удалить маркер из расчет
в новом Google Maps API для 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);
}
}
});
}
кто-нибудь есть идея получше?
9 ответов:
сигнатура метода для
addMarker
- это:public final Marker addMarker (MarkerOptions options)
поэтому, когда вы добавляете маркер в
GoogleMap
указать параметры для маркера, вы должны сохранитьMarker
объект, который возвращается (вместоMarkerOptions
объект, который вы использовали для его создания). Этот объект позволяет изменить состояние маркера позже. Когда вы закончите с маркером, Вы можете позвонитьMarker.remove()
снять его с карты.как кроме того, если вы хотите только временно скрыть его, вы можете переключить видимость маркера, вызвав
Marker.setVisible(boolean)
.
добавьте маркер на карту Вот так
Marker markerName = map.addMarker(new MarkerOptions().position(latLng).title("Title"));
тогда вы сможете использовать метод remove, он удалит только этот маркер
markerName.remove();
если маркер существует удалить последний маркер. если маркер не существует, создайте текущий маркер
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))); }
1. если вы хотите удалить маркер, вы можете сделать это
marker.remove();
кроме того, вы также можете скрыть маркер вместо того, чтобы удалить его какmarker.setVisible(false);
и сделать его видимым позже, когда это необходимо.
2. однако если вы хотите удалить все маркеры с карты использоватьmap.clear();
Примечание:map.clear();
также будут удаленыPolylines, Circles
etc.
3. если вы не хотите удалитьPolylines, Circles
etc. чем использовать петлю для длина маркера (если у вас несколько маркеров), чтобы удалить Проверьте пример здесьили установите их видимыми ложными и не используйтеmap.clear();
в таком случае.
использовать следующий код:
mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() { @Override public boolean onMarkerClick(Marker marker) { marker.remove(); return true; } });
Как только вы нажмете на "маркер", вы можете удалить его.
создать глобальную переменную, чтобы отслеживать маркер
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();
просто заметка, что-то, что я потратил часы на поиски сегодня вечером...
Если вы решили держаться за маркер по какой-то причине, после того, как вы удалили его с карты... getTag вернет NULL, даже если остальные значения get вернутся со значениями, которые вы установили для них при создании маркера...
значение тега имеет значение NULL, если вы когда-либо удаляете маркер, а затем пытаетесь ссылаться на него.
Мне кажется, что это ошибка...