如何禁用标记点击事件?

我正在开发一个简单的应用程序,我已经显示标记标题与mrkr.showInfoWindow()但我不希望用户再次点击该标记。 如何禁用特定标记的点击事件?

这是我的尝试。

  Marker marker = gMap.addMarker(new MarkerOptions().position(new LatLng(location .getLatitude(), location.getLongitude())).title("I am here").icon(BitmapDescriptorFactory.fromResource(R.drawable.mrk1))); marker.showInfoWindow(); //how to use marker.setClickable here or somthing here.? 

如何在我的应用程序中显示我的标记的infowindow()/标题?

Related of "如何禁用标记点击事件?"

您可以在GoogleMap对象中设置onMarkerClickListener

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

3年后的这一点很明显,没有办法让标记点击通过地图本身(OnMapClickListener)来处理。 标记将始终拦截此事件,但您可以禁用点击的默认行为(如上面的答案所示)。 以下是张贴的情况下,它可以帮助别人仍然需要更好的解决scheme。

要解决此限制,有两个选项。 我已经实现了这两个,并可以按要求清理和分享代码。

1.)创build一个GroundOverlay位图,其中包含您不想处理的路标。 您可以使用GoogleMap的Projection对象将屏幕点转换为LatLng,并计算位图的位置,以使航点显示在正确的位置。 处理旋转,贴图填充以及其他一些问题相当复杂。 在放大时,航点标记的大小会变大,然后在onCameraIdle事件中重新创build位图,并在必要时重新定位GroundOverlay。 这是我在生产中使用的方法。 平移,旋转和缩放都非常平滑,并且由于地面覆盖图可以设置为处理或不处理水龙头,因此可以解决问题。 我无法弄清楚如何使这个工作倾斜。 在旋转过程中,航点本身不会面向北方,但在重新创build地面覆盖时,可以直立旋转。 在onCameraIdle导致地面叠加层的重新创build之后,地图有短暂的暂停/不响应。

2.)创build一个覆盖整个屏幕的View对象,并在视图的onDraw方法中绘制航点标记。 再次使用GoogleMap的投影对象来计算在哪里绘制标记。 在onCameraMove事件中,在视图上调用invalidate(),以便在新的屏幕位置重新绘制标记。 这个的主要优点是简单。 旋转,倾斜,贴图填充偏移量都是为您处理的。 主要的缺点是,如果你在每一个onCameraMove事件失效,这是有点太密集CPU(我认为)和地图平移/缩放可能会变得不稳定。 如果您每3或5个移动事件失效,那么当您平移/缩放时,航点显示为反弹,因为它们没有足够频繁地在新的位置重新绘制。 尽pipe如此,在地图移动结束时没有延迟。 最终,在地图上有100-200个航点,“平移”性能问题对我来说太明显了。

希望这有助于某人。 让我知道如果你需要一些代码的帮助。

你可以在下面使用onMarkerClickListener ,

 mMap.setOnMarkerClickListener( new OnMarkerClickListener() { @Override public boolean onMarkerClick ( Marker marker ) { // do nothing return false; } });