2013-06-29 2 views
18

Desidero rimuovere un indicatore corrente dopo un lungo clic sulla mappa ovunque e ricreare un nuovo marker in quel punto. Ho cancellato la mappa di google su un lungo clic sulla mappa e viene creato un nuovo marker, ma viene visualizzato anche il marker precedente.Rimuovi il marker precedente e aggiungi un nuovo marker in Google Map v2

il mio codice è:

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; 

} 

risposta

30

Basta creat un nuovo oggetto marcatore e prima di aggiungere un nuovo marcatore, rimuovere il precedente

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

EDIT

fare il lo stesso per 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); 

     } 
    }); 
+0

Il nuovo indicatore viene creato dopo un clic lungo, ma il marcatore precedente non viene rimosso dopo aver toccato di nuovo la mappa, anche se l'ho rimosso. –

+0

Sì ... Funziona bene, ma il piccolo problema è dopo un lungo clic sul nuovo marcatore creato, ma dopo aver toccato la mappa ovunque automaticamente viene rimosso il nuovo marker e il marker precedente visualizzato nella posizione corrente. –

+0

Hai aggiunto sia "onClick" che "onLongClick" sulla mappa. e in entrambi hai aggiunto il marcatore. Quindi, ogni volta che clicchi o fai un lungo clic sulla mappa, verrà posizionato un nuovo marcatore rimuovendo quello precedente. –

3

Basta cancellare la mappa di google prima di aggiungere un indicatore. In questo modo:

@Override 
public void onMapLongClick(LatLng latLng) { 
    googleMap.clear(); 

    googleMap.addMarker(new MarkerOptions() 
      .position(latLng) 
      .title(latLng.toString()) 
      .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED))); 
} 
+1

carica con il nuovo marker anche con i precedenti –

+0

@noman non funziona ... è un metodo sbagliato. –

+0

Non funziona .. –

0

Basta ripubblicare la risposta di Anthony.

la firma del metodo per l'addMarker è:

pubblico finale Marker addMarker (MarkerOptions opzioni) Quindi, quando si aggiunge un marcatore a una GoogleMap specificando le opzioni per il marcatore, si dovrebbe salvare l'oggetto marcatore che viene restituito (invece dell'oggetto MarkerOptions che hai usato per crearlo). Questo oggetto ti consente di cambiare lo stato del marcatore in seguito. Quando hai finito con il pennarello, puoi chiamare Marker.remove() per rimuoverlo dalla mappa.

Per inciso, se si desidera solo nasconderlo temporaneamente, è possibile attivare la visibilità dell'indicatore chiamando Marker.setVisible (booleano).

È possibile trovare la risposta qui Remove a marker from a GoogleMap

2

Ecco un modo semplice Basta cambiare il position del marcatore. Crea oggetto globale come Marker marker;
Dopo quel marcatore metti in mappa come

marker = map.addMarker(markerOptions).position(new Latlng(31.647316, 74.763791)); 

E dopo che uso marker.setPosition(newlaLng); in cui è necessario aggiungere marcatore.

0

Si prega di provare il codice colpo: -

// 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: - Il tuo LatLong in cui si desidera aggiungere e bitmapDescroptor è un'icona. {Solo per capire}