Google Maps API v2: How to make markers non-clickable?
Asked Answered
N

5

9

I mean if i click marker OnMarkerClickListener is called, so the OnMapClickListener did not. Even if i set mMap.setOnMarkerClickListener(null); marker object still masks all click events for underlying map and objects. How can i set Marker transparent for all user interractions?

Neigh answered 26/7, 2013 at 14:44 Comment(0)
M
6

This is indeed a "limitation" of markers as of 3.1.59 version of the library.

If you really need them to be markers, please post a feature request on gmaps-api-issues for MarkerOptions.clickable and Marker.setClickable.

If you can, consider using other visual objects, e.g. GroundOverlay. The only problem is they all scale with map, unlike markers. The closest would be Circle with zero radius and 20-50 dp stroke width, but that's only a single color dot.

Melchizedek answered 26/7, 2013 at 17:27 Comment(0)
L
4

According to the docs about markers, if you add your own Listener and the onMarkerClick() method returns false, the default behaviour will be executed.

So, in the onMarkerClick() just return true and do nothing else to completely overwrite the default.

Liz answered 26/7, 2013 at 15:4 Comment(4)
My tried onMarkerClick(Marker arg0) {return true;} but onMapClick is still not called. I think docs's explanation means that if I return true no default behavior will occure (infoWindow), only my code, wich i post in onMarkerClickNeigh
Try this: in onMarkerClick add the line onMapClick(marker.getPosition());Liz
I thought about it. In this case would be a great error. I will do this way if no other solution would be not foundNeigh
Well the problem is if you click the marker the onMapClick will not be triggered.Liz
S
3

The only workaround I found for this issue is to execute the same code in OnMarkerClickListener that you have in OnMapClickListener and return false:

getMap().setOnMarkerClickListener(new OnMarkerClickListener() {

    public boolean onMarkerClick(Marker marker) {
        onMapClick(marker.getPosition());
        return true;
    }
});
Swag answered 21/10, 2013 at 9:52 Comment(1)
This solution doesn't work because onMarkerClick gives you the location of the marker that it determines is closest to where you clicked, not where you actually clicked.Tapp
M
1

You can skip setting Marker.Title and in this case the marker won't be clickable. Use Marker.Tag if you need to associate some data (like id or name) with the marker without an ability for end-user to tap and see that.

Mortify answered 24/9, 2019 at 2:29 Comment(0)
C
-1

Make your class implementing Google Maps implement OnMarkerClickListener, i.e.:

public class GoogleMapFragment extends Fragment implements MapImplementation, OnMapReadyCallback,
    GoogleMap.OnMapClickListener, GoogleMap.OnMarkerClickListener {

and then implement method inside:

    @Override
    public boolean onMarkerClick(@NonNull Marker marker) {
        // Make Marker not clickable in practice
        return true;
    }
Crockett answered 2/5, 2022 at 5:51 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.