Google Maps Android API v2 detect long press on map and add marker not working

34,603

Solution 1

I used this. It worked.

GoogleMap gm;

gm.setOnMapLongClickListener(this); 

@Override    
public void onMapLongClick(LatLng point) {
    gm.addMarker(new MarkerOptions()
        .position(point)
        .title("You are here")           
        .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));  
}

Solution 2

You have no icon setted. Try:

    @Override
    public void onMapLongClick(LatLng point) {

        myMap.addMarker(new MarkerOptions()
            .position(point)
            .title(point.toString())
            .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED))); 

         Toast.makeText(getApplicationContext(),
            "New marker added@" + point.toString(), Toast.LENGTH_LONG)
            .show();

} 

Solution 3

googleMap = supportMapFragment.getMap();

    // Setting a click event handler for the map
    googleMap.setOnMapClickListener(new OnMapClickListener() {

        @Override
        public void onMapClick(LatLng latLng) {

            // Creating a marker
            MarkerOptions markerOptions = new MarkerOptions();

            // Setting the position for the marker
            markerOptions.position(latLng);

            // Setting the title for the marker.
            // This will be displayed on taping the marker
            markerOptions.title(latLng.latitude + " : " + latLng.longitude);

            // Clears the previously touched position
            googleMap.clear();

            // Animating to the touched position
            googleMap.animateCamera(CameraUpdateFactory.newLatLng(latLng));

            // Placing a marker on the touched position
            googleMap.addMarker(markerOptions);
        }
    });

OR

mMap.setOnMapLongClickListener(new
           GoogleMap.OnMapLongClickListener() {
        @Override
        public void onMapLongClick (LatLng latLng){
           Geocoder geocoder =
              new Geocoder(MapMarkerActivity.this);
           List<Address> list;
           try {
              list = geocoder.getFromLocation(latLng.latitude,
                 latLng.longitude, 1);
           } catch (IOException e) {
              return;
           }
           Address address = list.get(0);
           if (marker != null) {
              marker.remove();
           }

           MarkerOptions options = new MarkerOptions()
              .title(address.getLocality())
              .position(new LatLng(latLng.latitude,
                 latLng.longitude));

           marker = mMap.addMarker(options);
        }
     });
Share:
34,603
Bishan
Author by

Bishan

#SOreadytohelp

Updated on July 05, 2022

Comments

  • Bishan
    Bishan almost 2 years

    I want to add a marker on map with long press.

    Toast in onMapClick() was display with normal tap. But long press is not working. Toast in onMapLongClick() is not displayed with long press. Also marker is not displayed on map.

    I'm using SupportMapFragment because I want to use my application on Android 2.x devices. I have tested my app on Nexus One which has Android version 2.3.7.

    This is my code.

    public class MainActivity extends FragmentActivity implements
            OnMapClickListener, OnMapLongClickListener {
    
        final int RQS_GooglePlayServices = 1;
        private GoogleMap myMap;
    
        Location myLocation;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            FragmentManager myFragmentManager = getSupportFragmentManager();
            SupportMapFragment mySupportMapFragment = (SupportMapFragment) myFragmentManager
                    .findFragmentById(R.id.map);
            myMap = mySupportMapFragment.getMap();
    
            myMap.setMyLocationEnabled(true);
    
            myMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
            // myMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
            // myMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
            // myMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
    
            myMap.setOnMapClickListener(this);
            myMap.setOnMapLongClickListener(this);
    
        }
    
        @Override
        protected void onResume() {
            super.onResume();
    
            int resultCode = GooglePlayServicesUtil
                    .isGooglePlayServicesAvailable(getApplicationContext());
    
            if (resultCode == ConnectionResult.SUCCESS) {
                Toast.makeText(getApplicationContext(),
                        "isGooglePlayServicesAvailable SUCCESS", Toast.LENGTH_LONG)
                        .show();
            } else {
                GooglePlayServicesUtil.getErrorDialog(resultCode, this,
                        RQS_GooglePlayServices);
            }
    
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
    
        @Override
        public void onMapClick(LatLng point) {
    
            myMap.animateCamera(CameraUpdateFactory.newLatLng(point));
    
            Toast.makeText(getApplicationContext(), point.toString(),
                    Toast.LENGTH_LONG).show();
    
    
        }
    
        @Override
        public void onMapLongClick(LatLng point) {
    
            myMap.addMarker(new MarkerOptions().position(point).title(
                    point.toString()));
    
            Toast.makeText(getApplicationContext(),
                    "New marker added@" + point.toString(), Toast.LENGTH_LONG)
                    .show();
    
        }
    
    }
    

    How can I solve this ?

  • Tonnie
    Tonnie almost 4 years
    I had forgotten to add map.setOnMapLongClickListner(this)