如何禁用标记点击事件?

Apa*_*ith 14 android google-maps google-maps-markers google-maps-android-api-2

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

如何在我的申请中显示我的标记的infowindow()/标题?

Wis*_*ter 25

您可以在GoogleMap对象中设置onMarkerClickListener

map.setOnMarkerClickListener(new OnMarkerClickListener() {
        @Override
        public boolean onMarkerClick(Marker marker) {
            return true;
        }
    });
Run Code Online (Sandbox Code Playgroud)

  • 如果您想禁用市场点击事件,那么我想这不是正确的答案。 (2认同)

小智 7

3年后的这一点很清楚,没有办法让标记点击通过地图本身(OnMapClickListener)来处理.标记将始终拦截此事件,但您可以通过单击禁用默认行为(如上面的答案所示).如果它可以帮助仍需要更好解决方案的人,则发布以下内容.

要解决此限制,有两种选择.我已经实现了两者,并且可以根据请求清理和共享代码.

1.)创建一个GroundOverlay位图,其中包含您不想处理的航点.您可以使用GoogleMap的Projection对象将屏幕点转换为LatLng,并计算位图的位置,以使航点显示在正确的位置.处理旋转,地图填充和一些其他问题相当复杂.放大时,航点标记的大小会增大,然后在onCameraIdle事件中,您重新创建位图,并在必要时重新定位GroundOverlay.这是我在制作中使用的方法.平移,旋转和缩放都非常流畅,并且可以设置地面覆盖以处理或不处理水龙头,它解决了问题.我无法弄清楚如何通过倾斜来完成这项工作.航点在旋转期间不会保持朝北,但在重新创建GroundOverlay时可以直立旋转.在onCameraIdle导致重新创建地面叠加层之后,地图会有短暂的暂停/无响应.

2.)创建一个覆盖整个屏幕的View对象,并在视图的onDraw方法中绘制航点标记.再次,使用GoogleMap的投影对象来计算绘制标记的位置.在onCameraMove事件中,在视图上调用invalidate(),以便在新的屏幕位置重新绘制标记.这样做的主要优点是简单.旋转,倾斜,地图填充偏移都是为您处理的.主要的缺点是,如果你在每个onCameraMove事件上失效,它有点太cpu密集(我推测),地图平移/缩放可能会变得不连贯.如果您使每个3或5个移动事件无效,那么当您平移/缩放时,航点似乎会弹跳,因为它们不经常在新位置重新绘制.但是,在地图移动结束时没有延迟.最终,在地图上有100-200个航点,"平移"性能问题对我来说太明显了.

希望这有助于某人.如果您需要一些代码帮助,请告诉我.