如何禁用标记点击事件?

我正在开发一个简单的应用程序,我已经显示标记标题与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()/标题?

  • 如何在Google Maps v2 android中顺利移动当前位置标记
  • 在Android Google Maps API的v2中实现覆盖的build议方式是什么?
  • 当第二次点击标记时隐藏infoWindow(Google Map Android API V2)
  • 如何在Google Map API v2中处理地图的onTouch事件?
  • Google Maps Android API v2抛出GooglePlayServicesNotAvailableException,过期,SupportMapFragment.getMap()返回null
  • Android studio v0.3.2,gradle,google maps v2.0没有find类“com.google.android.gms.maps.MapFragment
  • 我可以为所有应用程序使用单个Google Maps API密钥,而无需注册其软件包名称吗?
  • 如何显示2个视图,在Android上具有渐变淡入淡出效果?
  • 您可以在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; } });