2013-06-29 6 views
18

지도를 아무 데나 클릭 한 후 현재 마커를 제거하고 그 지점에서 새 마커를 다시 만들고 싶습니다. 지도를 길게 클릭하면 Google지도가 지워지고 새 마커가 만들어 지지만 이전 마커도 표시됩니다.이전 마커를 제거하고 Google 마커 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

그냥 새로운 마커 객체를 creat에 새로운 마커를 추가하기 전에, 이전

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

편집

이 작업을 수행 제거 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 방법 서명은 다음과 같습니다 당신이 마커에 대한 옵션을 지정하여 GoogleMap으로에 마커를 추가 할 때

공공 최종 마커 addMarker (MarkerOptions 옵션) 그래서, 당신은 반환되는 마커 객체를 저장해야 (생성하는 데 사용한 MarkerOptions 객체 대신). 이 개체를 사용하면 나중에 마커 상태를 변경할 수 있습니다. 마커를 마쳤 으면 Marker.remove()를 호출하여 맵에서 마커를 제거 할 수 있습니다.

일시적으로 숨기기 만하려는 경우 Marker.setVisible (부울 값)을 호출하여 표식의 표시 여부를 전환 할 수 있습니다.

당신은 여기에 대답 여기 Remove a marker from a GoogleMap

2

그냥 마커의 position을 변경해야하는 간단한 방법을 찾을 수 있습니다. 당신이 마커를 추가해야 할 곳이 marker.setPosition(newlaLng);를 사용한 후 그 추가 마커 후

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

처럼지도하는 Marker marker;
으로 전역 개체를 만듭니다.

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

하는 LatLng : - 추가 할 및 bitmapDescroptor 아이콘입니다 귀하의 latlong. {이해를 돕기 위해}

관련 문제