2017-02-22 44 views
0

android 용 Google Maps API v3에서 길게 누르면 마커 추가를 구현하는 방법은 무엇입니까? Stack Overflow 자체에 대한 답변이 있지만 Google Maps API v2 용입니다. @tyczj는 지적Google지도 API v3의 길게 누르기에 마커 추가

public class advertiserMap extends FragmentActivity implements OnMapReadyCallback { 

private GoogleMap mMap; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_advertiser_map); 
    // Obtain the SupportMapFragment and get notified when the map is ready to be used. 
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() 
      .findFragmentById(R.id.map); 
    mapFragment.getMapAsync(this); 
} 

//for searching for a location 
public void onMapSearch(View view) { 
    EditText locationSearch = (EditText) findViewById(R.id.editText); 
    String location = locationSearch.getText().toString(); 
    List<Address> addressList = null; 

    if (location != null || !location.equals("")) { 
     Geocoder geocoder = new Geocoder(this); 
     try { 
      addressList = geocoder.getFromLocationName(location, 1); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     Address address = addressList.get(0); 
     LatLng latLng = new LatLng(address.getLatitude(), address.getLongitude()); 
     mMap.animateCamera(CameraUpdateFactory.newLatLng(latLng)); 
    } 
} 

@Override 
public void onMapReady(GoogleMap googleMap) { 
    mMap = googleMap; 

    // Add a marker in Sydney and move the camera 
    LatLng sydney = new LatLng(-34, 151); 
    mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney")); 
    mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney)); 
} 

}

+0

샘플 코드가 있습니까? –

+0

v3과 같은 것은 존재하지 않으며, android는 v2입니다. https://developers.google.com/maps/documentation/android-api/start 앱에서 자바 버전 (v3)을 사용하고 싶지 않다면 – tyczj

+0

@Drew 방금 방금 게시물을 편집했습니다 – jo12345678

답변

3

은 안드로이드 구글지도 API에 대한 V3 없다, 그래서 당신은 아마 V2를 사용하고 있습니다.

원하는대로하려면 mMap 개체의 setOnMapLongClickListener를 호출하고 원하는대로 마커를 onMapLongClick에 추가합니다. 당신은 onMapReady 방법에서이 작업을 수행해야합니다

@Override 
public void onMapReady(GoogleMap googleMap) { 

    ... 

    mMap.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() { 
     @Override 
     public void onMapLongClick(LatLng latLng) { 
      googleMap.addMarker(new MarkerOptions() 
        .position(latLng) 
        .title("Your marker title") 
        .snippet("Your marker snippet")); 
     } 
    }); 
} 

// 편집 : 당신이 한 번에 존재하는 하나 개의 마커를 유지하려면

, 그런 다음 글로벌 활동의 범위에 마커를 선언하고해야 마커이 이미 존재하는 경우, onMapLongClick에, 대신에 새로운 마커를 만드는, 그냥 위치의 업데이트 : 다음과 같이 수행하면

public class advertiserMap extends FragmentActivity implements OnMapReadyCallback { 

    // Declare marker globally 
    Marker myMarker; 

    ... 

    @Override 
    public void onMapReady(GoogleMap googleMap) { 

     ... 

     mMap.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() { 
      @Override 
      public void onMapLongClick(LatLng latLng) { 

       // First check if myMarker is null 
       if (myMarker == null) { 

        // Marker was not set yet. Add marker: 
        myMarker = googleMap.addMarker(new MarkerOptions() 
         .position(latLng) 
         .title("Your marker title") 
         .snippet("Your marker snippet")); 

       } else { 

        // Marker already exists, just update it's position 
        myMarker.setPosition(latLng); 

       } 
      } 
     }); 
    } 
} 

것은, 당신의 마커 코드에서 그것을 조작하기 전에 NULL이 아닌 경우 반드시 확인해야합니다.

+0

덕분에 매력적 이었지만 한 번에 한 마커 만 맵을 만들 수 있습니까? 예를 들어, 이미 오래 동안 어딘가에 눌렀는데 그것이 정확한 위치가 아니라고 결정했다면 다른 곳에서 오래 누르고 있으면 이전 마커가 사라질 필요가 있습니다. 마커의 위도를 검색해야하므로이 경우가 필요합니다. – jo12345678

+0

나는이 경우를 보완하여 답을 편집했다. 보세요 @ 졸란 Goburdhun –

+0

많은 친구를 고마워! – jo12345678