android - studio - Eliminar el marcador anterior y agregar un nuevo marcador en Google Map v2
google.maps.marker example (5)
Quiero eliminar un marcador actual después de un largo clic en el mapa en cualquier lugar y volver a crear un nuevo marcador en ese punto. He borrado google map con un clic largo en el mapa y se crea un nuevo marcador, pero también se muestra el marcador anterior.
Mi código es:
public class EditLocation extends Fragment {
View v;
Context c;
GoogleMap MAP;
Button back;
int loc;
String lat;
boolean isTapped = true;
public EditLocation(Context c, int location, String latitude) {
// TODO Auto-generated constructor stub
this.c = c;
this.loc = location;
this.lat = latitude;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
v = inflater.inflate(R.layout.map, container, false);
int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(c);
if (status != ConnectionResult.SUCCESS) {
int requestCode = 10;
Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status,
(Activity) c, requestCode);
dialog.show();
} else {
FragmentManager myFM = ((FragmentActivity) c)
.getSupportFragmentManager();
final SupportMapFragment myMAPF = (SupportMapFragment) myFM
.findFragmentById(R.id.fragmentmap);
MAP = myMAPF.getMap();
MAP.setMyLocationEnabled(true);
LocationManager locationManager = (LocationManager) c
.getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
String provider = locationManager.getBestProvider(criteria, true);
final Location location = locationManager
.getLastKnownLocation(provider);
final LatLng currentPosition = new LatLng(location.getLatitude(),
location.getLongitude());
MAP.setOnMapClickListener(new OnMapClickListener() {
@Override
public void onMapClick(LatLng point) {
// TODO Auto-generated method stub
MAP.addMarker(new MarkerOptions()
.position(currentPosition)
.snippet(
"Lat:" + location.getLatitude() + "Lng:"
+ location.getLongitude())
.icon(BitmapDescriptorFactory
.defaultMarker(BitmapDescriptorFactory.HUE_AZURE))
.title("ME"));
Log.e("lat", "" + point);
}
});
MAP.setOnMapLongClickListener(new OnMapLongClickListener() {
@Override
public void onMapLongClick(LatLng point) {
// TODO Auto-generated method stub
// isTapped = false;
MAP.clear();
MAP.addMarker(new MarkerOptions().position(point)
.title(point.toString()));
}
});
}
return v;
}
Aquí una forma simple, solo tienes que cambiar la position
del marcador. Crear objeto global como Marker marker;
Después de eso agrega marcador al mapa como
marker = map.addMarker(markerOptions).position(new Latlng(31.647316, 74.763791));
Y después de que use marker.setPosition(newlaLng);
Donde necesitas agregar marcador.
Por favor intente el código de golpe: -
// Global Variable...
private Marker mPreviousMarker ;
@Override
public boolean onMarkerClick(Marker marker) {
if (mPreviousMarker != null) {
mPreviousMarker.remove();
}
mPreviousMarker = googleMap.addMarker(new MarkerOptions().position(latLng).icon(bitmapDescriptor));
}
LatLng: - Su icono de latlong donde desea agregar y el mapa de bits Descroptor es. {Sólo para entender}
Simplemente borre el mapa de google antes de agregar marcador Me gusta esto:
@Override
public void onMapLongClick(LatLng latLng) {
googleMap.clear();
googleMap.addMarker(new MarkerOptions()
.position(latLng)
.title(latLng.toString())
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));
}
Simplemente cree un nuevo objeto marcador y antes de agregar un nuevo marcador, elimine el anterior.
Marker marker;
MAP.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() {
@Override
public void onMapLongClick(LatLng arg0) {
if (marker != null) {
marker.remove();
}
marker = MAP.addMarker(new MarkerOptions()
.position(
new LatLng(arg0.latitude,
arg0.longitude))
.draggable(true).visible(true));
}
});
EDITAR
Haz lo mismo para OnMapClick
MAP.setOnMapClickListener(new OnMapClickListener() {
@Override
public void onMapClick(LatLng point) {
// TODO Auto-generated method stub
if (marker != null) {
marker.remove();
}
marker = MAP.addMarker(new MarkerOptions()
.position(currentPosition)
.snippet(
"Lat:" + location.getLatitude() + "Lng:"
+ location.getLongitude())
.icon(BitmapDescriptorFactory
.defaultMarker(BitmapDescriptorFactory.HUE_AZURE))
.title("ME"));
Log.e("lat", "" + point);
}
});
Solo repostando la respuesta de Anthony.
La firma del método para addMarker es:
public Marker addMarker final (opciones MarkerOptions) Entonces, cuando agrega un marcador a un GoogleMap especificando las opciones para el marcador, debe guardar el objeto Marker que se devuelve (en lugar del objeto MarkerOptions que usó para crearlo). Este objeto le permite cambiar el estado del marcador más adelante. Cuando haya terminado con el marcador, puede llamar a Marker.remove () para eliminarlo del mapa.
Además, si solo desea ocultarlo temporalmente, puede alternar la visibilidad del marcador llamando a Marker.setVisible (booleano).
Puede encontrar la respuesta aquí Eliminar un marcador de un mapa de Google