在 Google 地图 API v3 中添加长按标记

Add marker on long press in Google Maps API v3

如何在 Google Maps API v3 for android 中实现长按添加标记? Stack Overflow 本身有关于此的答案,但它们适用于 Google Maps API v2.

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

}

正如@tyczj 指出的那样,Android Google 地图 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"));
        }
    }); 
}

// 编辑:

如果你想一次只保留一个标记,你应该在全局 activity 范围内声明你的标记,然后在 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。

嘿伙计们,如果你们都在使用 mMap.clear() 则将其删除。大多数情况下它工作得很好。