我正在开发一个简单的应用程序,我已经使用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()/标题?
答案 0 :(得分:22)
您可以在GoogleMap对象中设置onMarkerClickListener
map.setOnMarkerClickListener(new OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
return true;
}
});
答案 1 :(得分:7)
3年后的这一点很清楚,没有办法让标记点击通过地图本身(OnMapClickListener)来处理。标记将始终拦截此事件,但您可以通过单击禁用默认行为(如上面的答案所示)。如果它可以帮助仍需要更好解决方案的人,则发布以下内容。
要解决此限制,有两种选择。我已经实现了两者,并且可以根据请求清理和共享代码。
1。)创建一个GroundOverlay位图,其中包含您不想处理的路径。您可以使用GoogleMap的Projection对象将屏幕点转换为LatLng,并计算位图的位置,以使航点显示在正确的位置。处理旋转,地图填充和一些其他问题相当复杂。放大时,航点标记的大小会增大,然后在onCameraIdle事件中,您重新创建位图,并在必要时重新定位GroundOverlay。这是我在制作中使用的方法。平移,旋转和缩放都非常流畅,并且可以设置地面覆盖以处理或不处理水龙头,它解决了问题。我无法弄清楚如何通过倾斜来完成这项工作。航点在旋转期间不会保持朝北,但在重新创建GroundOverlay时可以直立旋转。在onCameraIdle导致重新创建地面叠加层之后,地图会有短暂的暂停/无响应。
2.。)创建一个覆盖整个屏幕的View对象,并在视图的onDraw方法中绘制航点标记。再次,使用GoogleMap的投影对象来计算绘制标记的位置。在onCameraMove事件中,在视图上调用invalidate(),以便在新的屏幕位置重新绘制标记。这样做的主要优点是简单。旋转,倾斜,地图填充偏移都是为您处理的。主要的缺点是,如果你在每个onCameraMove事件上失效,它有点太cpu密集(我推测),地图平移/缩放可能会变得不连贯。如果您使每个3或5个移动事件无效,那么当您平移/缩放时,航点似乎会弹跳,因为它们不经常在新位置重新绘制。但是,在地图移动结束时没有延迟。最终,在地图上有100-200个航点,“平移”性能问题对我来说太明显了。
希望这有助于某人。如果您需要一些代码帮助,请告诉我。
答案 2 :(得分:0)
您可以使用onMarkerClickListener,如下所示,
mMap.setOnMarkerClickListener( new OnMarkerClickListener()
{
@Override
public boolean onMarkerClick ( Marker marker )
{
// do nothing
return false;
}
});