android - marcadores - google maps multiple markers



Eliminar el marcador anterior y agregar un nuevo marcador en Google Map v2 (4)

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;

}

https://src-bin.com


Answer #1

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.


Answer #2

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}


Answer #3

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);

        }
    });

Answer #4

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





google-maps-android-api-2