我的意思是,如果我单击标记OnMarkerClickListener
,那么OnMapClickListener
不会被调用。即使我设置了mMap.setOnMarkerClickListener(null);
标记对象,它仍然会屏蔽底层贴图和对象的所有单击事件。如何将Marker
设置为对所有用户交互透明?
这确实是3.1.59版本库中标记的"限制"。
如果你真的需要它们作为标记,请发布一个关于MarkerOptions.clickable
和Marker.setClickable
的gmaps-api问题的功能请求。
如果可以,可以考虑使用其他视觉对象,例如GroundOverlay
。唯一的问题是它们都是按地图缩放的,不像标记。最接近的是半径为零、笔划宽度为20-50 dp的Circle
,但这只是一个单色点。
根据关于标记的文档,如果您添加自己的Listener,并且onMarkerClick()方法返回false,则将执行默认行为。
因此,在onMarkerClick()中只返回true,不做任何其他操作来完全覆盖默认值。
我为这个问题找到的唯一解决方法是在OnMarkerClickListener
中执行与在OnMapClickListener
中相同的代码,并返回false
:
getMap().setOnMarkerClickListener(new OnMarkerClickListener() {
public boolean onMarkerClick(Marker marker) {
onMapClick(marker.getPosition());
return true;
}
});
您可以跳过设置Marker.Title
,在这种情况下,标记将无法单击。如果您需要将一些数据(如id或名称)与标记关联,而最终用户无法点击并查看,请使用Marker.Tag
。
让实现Google Maps的类实现OnMarkerClickListener,即:
public class GoogleMapFragment extends Fragment implements MapImplementation, OnMapReadyCallback,
GoogleMap.OnMapClickListener, GoogleMap.OnMarkerClickListener {
然后在里面实现方法:
@Override
public boolean onMarkerClick(@NonNull Marker marker) {
// Make Marker not clickable in practice
return true;
}