Dans la nouvelle API Google Maps pour Android, nous pouvons ajouter un marqueur , mais il n’ya aucun moyen de les supprimer (facilement).
Ma solution consiste à conserver les marqueurs dans une carte et à redessiner la carte lorsque je souhaite supprimer un marqueur, mais ce n'est pas très efficace.
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);
}
}
});
}
Quelqu'un a-t-il une meilleure idée?
La signature de la méthode pour addMarker
est:
public final Marker addMarker (MarkerOptions options)
Ainsi, lorsque vous ajoutez un marqueur à un GoogleMap
en spécifiant ses options, vous devez enregistrer l'objet Marker
renvoyé (au lieu de l'objet MarkerOptions
que vous avez utilisé pour le créer). Cet objet vous permet de changer l'état du marqueur ultérieurement. Lorsque vous avez terminé avec le marqueur, vous pouvez appeler Marker.remove()
pour le supprimer de la carte.
En passant, si vous voulez seulement le cacher temporairement, vous pouvez changer la visibilité du marqueur en appelant Marker.setVisible(boolean)
.
pour effacer tous les gribouillis dans la carte
map.clear()
Ajouter le marqueur à la carte comme ceci
Marker markerName = map.addMarker(new MarkerOptions().position(latLng).title("Title"));
Ensuite, vous pourrez utiliser la méthode remove, elle ne supprimera que ce marqueur
markerName.remove();
si un marqueur existe, retirer le dernier marqueur. si le marqueur n'existe pas, créer le marqueur actuel
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)));
}
utilisez le code suivant:
mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
marker.remove();
return true;
}
});
une fois que vous avez cliqué sur "un marqueur" , vous pouvez le supprimer.
_ {1. Si vous souhaitez supprimer un marqueur, vous pouvez le faire en tant que marker.remove();
vous pouvez également masquer le marqueur au lieu de le supprimer comme
marker.setVisible(false);
et le rendre visible plus tard si nécessaire.
2. Toutefois, si vous souhaitez supprimer tous les marqueurs de la carte Utilisermap.clear();
Note:map.clear();
supprimera également Polylines, Circles
etc.
3. Si vous ne souhaitez pas supprimer Polylines, Circles
, etc., utilisez une boucle de la longueur du marqueur (si vous en avez plusieurs) pour les supprimer Découvrez l'exemple ici _ OU définissez-les Visible false et n'utilisez pas map.clear();
dans ce cas.
Juste une note, quelque chose que j'ai perdu des heures à chercher ce soir ...
Si vous décidez de conserver un marqueur pour une raison quelconque, après l'avoir retiré d'une carte ... getTag renverra NULL, même si les valeurs restantes get renverront avec les valeurs que vous avez définies lors de la création du marqueur. .
La valeur de TAG est définie sur NULL si vous supprimez un marqueur, puis essayez de le référencer.
Ça ressemble à un bug pour moi...
Créer un tableau avec tous les marqueurs sur add in map.
Plus tard, utilisez:
Marker temp = markers.get(markers.size() - 1);
temp.remove();
Faire une variable globale pour garder une trace du marqueur
private Marker currentLocationMarker;
// Supprimer l'ancien marqueur
if (null != currentLocationMarker) {
currentLocationMarker.remove();
}
// Ajoute un marqueur mis à jour et déplace la caméra
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();