2013-06-29 9 views
18

地図上のどこかを長くクリックした後に現在のマーカーを削除し、その時点で新しいマーカーを作り直したいと思います。私はマップ上の長いクリックでGoogleマップをクリアし、新しいマーカーが作成されていますが、前のマーカーも表示されます。Google Map v2で以前のマーカーを削除して新しいマーカーを追加します

マイコードは次のとおりです。

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; 

} 

答えて

30

ただ、新しいマーカーオブジェクトをレコード生成し、新しいマーカーを追加する前に、以前のもの

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

を削除するには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

新しいマーカーは長いクリック後に作成されていますが、以前のマーカーは地図上をタップした後に削除されません。 –

+0

はい...うまく働いていますが、小さな問題は、作成された新しいマーカーをクリックした後ですが、地図上でタッチした後で自動的に新しいマーカーが削除され、現在の位置に以前のマーカーが表示されます。 –

+0

マップ上にonClickとonLongClickの両方を追加しました。両方ともマーカーを追加しました。したがって、地図をクリックするかクリックするたびに、新しいマーカーが置かれ、前のマーカーが削除されます。 –

3

マーカーを追加する前にGoogleマップを消去してください。このように:

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

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

それは以前のものと同様に新しいマーカーをロードします –

+0

@nomanそれは間違った方法です。 –

+0

それは動作していません.. –

0

アンソニーの回答を再投稿するだけです。

addMarkerためのメソッドシグネチャは次のとおりです。

公共最終マーカーaddMarker(MarkerOptionsオプション) あなたはマーカーのためのオプションを指定することで、Googleマップにマーカーを追加するときに、あなたが返されたマーカーオブジェクトを保存する必要があります(作成に使用したMarkerOptionsオブジェクトではなく)。このオブジェクトを使用すると、マーカーの状態を後で変更できます。マーカーが終了したら、Marker.remove()を呼び出してマップからマーカーを削除できます。

一時的に非表示にしたい場合は、Marker.setVisible(boolean)を呼び出してマーカーの表示を切り替えることができます。

現在地答えここRemove a marker from a GoogleMap

2

あなただけのマーカーのpositionを変更する必要があり、簡単な方法を見つけることができます。その後Marker marker;
としてグローバルオブジェクトを作成します

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

そして、あなたはマーカーを追加する必要がある場所、それがmarker.setPosition(newlaLng);を使用した後のようにマップするためにマーカーを追加します。

0

ブローコードを試してください: -

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

緯度経度: - あなたが追加したいとbitmapDescroptorがアイコンであるあなたのLatLongブログ。 {理解のために}

関連する問題