在Maps API v2中完全禁用onMarkerClickListener

16

我想禁用地图标记的点击/轻敲。我知道您可以通过设置一个空的map.setOnMarkerClickListener并返回true来禁用默认行为;但是,这仍然将轻敲视为点击标记。我希望将轻敲传递给onMapClickListener

在我的应用程序中,轻敲地图会移动标记,如果您轻敲靠近已有标记的位置,它会误认为您轻敲了标记!您可能会认为有一个Marker.setClickable方法,但实际上没有。


1
我在这篇文章中找到了解决方案: https://dev59.com/12Uq5IYBdhLWcg3wbv9Z 基本上返回true并在其监听器上调用onMapClick。 对我有用。 - Patrick Jackson
2
@Patrick,看起来这个方法可以工作,但并不完美。原因在于:你有一个标记。你在它附近轻触,onMarkerClick被触发,然后传递给onMapClick。然而,它将marker.getPosition()传递给了onMapClick,而不是实际的轻触位置。因此,在标记附近的任何地方轻触都与在该标记上轻触相同。我如何获取轻触的真实位置? - Flyview
基本上是完全相同的问题:https://dev59.com/qnTYa4cB1Zd3GeqP0fHY - Flyview
你好,我在这方面查找了很多资料,但基本上是通过运行应该在地图单击或标记单击时运行的方法来解决的。这样就解决了。简单方便。你也应该试试。 - alicanbatur
1
如上所述,@alicanbatur - 您不知道点击了标记的哪个像素,您只能使用标记位置。 - tomash
显示剩余5条评论
6个回答

9

只需要重写onclick事件:

map.setOnMarkerClickListener(new OnMarkerClickListener() {
    public boolean onMarkerClick(Marker arg0) {
        return true;
    }
});

0

我有两个建议:

如果我理解正确,您想要提供在地图上放置标记的功能,对吗?如果您无法删除 setOnMarkerClickListener,您是否尝试在地图上 绘制 并最终将其“转换”为 Marker。(从绘图中获取 'LatLng' 并创建一个 Marker)。

实际上,第二个建议并不是一个好主意(这取决于您是否可以缩放/移动地图)。我有一个类似的任务,我们在地图上使用了一个透明的覆盖层,它处理了所有用户输入并委托它。但我们没有缩放和移动的功能,这会很麻烦...


1
不,我不是试图在地图上放置标记。我正在尝试禁用Google的onMarkerClickListener并将点击事件传递给onMapClickListener。 - Flyview

-1

map.setOnMarkerClickListener(null); 试试这个


3
不能工作。就好像你根本没有设置自己的侦听器,而是默认行为接管了。 - Flyview

-1
应用OnMarkerClickListener到您的地图上。实现onMarkerClick()方法并返回false
googleMap.setOnMarkerClickListener(new OnMarkerClickListener() {
    public boolean onMarkerClick(Marker marker) {
        return true;
    }
});

最好返回 true 来消耗事件并覆盖行为。 - sulai

-1
class MyInfoWindowAdapter implements GoogleMap.InfoWindowAdapter
{
     @Override
     public View getInfoContents(Marker mar)
     {
         return null;
     }
     @Override
     public View getInfoWindow(Marker mar)
     {
         return null;
     }
}

gmap.setInfoWindowAdapter(new MyInfoWindowAdapter);

尝试使用上面的代码。这将把您的信息窗口设置为 null。


这个答案是错误的。设置一个自定义的“InfoWindowAdapter”返回null只意味着使用默认的“InfoWindowAdapter”。这会导致股票行为。 - zyamys

-3

不需要实现OnMarkerClickListner。只需尝试删除此语句。

map.setOnMarkerClickListner(this)

从你的代码中,我希望它能解决你的问题。

不行,这样做不起作用。默认的onMarkerClick行为会接管控制权。 - Flyview
尝试重写此方法并不调用super,以避免默认方法。 - Karan Nagpal
我没有调用 super。 - Flyview
你实现这个方法的方式是,总是覆盖原有方法。也没有调用 super 方法。所以,没错,从一开始我就尝试过这个方法,但它不起作用,很抱歉。 - Flyview

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接