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

3

13

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 ?

Precedence answered 19/4, 2013 at 4:19 Comment(0)
W
46

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)));  
}
Washrag answered 19/4, 2013 at 4:23 Comment(1)
I had forgotten to add map.setOnMapLongClickListner(this)Servant
F
1

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

} 
Ferrotype answered 20/9, 2016 at 12:31 Comment(0)
A
1
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);
        }
     });
Ambary answered 8/8, 2017 at 12:51 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.