如何单击标记下方的 GoogleMap 多边形?
How to click a GoogleMap Polygon below a Marker?
我的 android 应用程序使用 GoogleMap
和 Polygons
来显示用户感兴趣的区域。如果用户单击 Polygon
,则单击事件由 OnPolygonClickListener
处理,并显示一个信息对话框。我的问题在于显示用户当前位置的 Marker
阻止了传递给下面 Polygon
的点击事件。
旁注:标记的点击区域似乎也比可见区域大。这个圆圈实际上几乎挡住了它下面的整个正方形。
到目前为止我尝试了什么:
捕获点击事件并忽略它
getMap().setOnMarkerClickListener(new OnMarkerClickListener() {
public boolean onMarkerClick(Marker marker) {
return true;
}
});
在这种情况下不起作用,因为我们可以 return false 触发默认行为(放大标记)或 true 完全忽略点击事件,因为 - per documentation - 那里每次点击只有一个事件。
- 更改多边形的 z-index:不起作用,因为 - 再次根据文档 - "Markers are effectively considered to be in a separate z-index group compared to other overlays or shapes, regardless of the z-index of the other overlays" 所以点击事件总是首先传递给潜在标记。
那么有没有办法让 Polygon
低于 Marker
可点击或至少将可点击标记区域缩小到可见大小?
根据 MrUpsidown 的建议并使用 googlemaps PolyUtil 我实施了手动验证以手动触发 Polygon
有针对性的点击。当处理大量的多边形时,我无法说出 containsLocation()
的效率,但它暂时有效。
mMap.setOnMarkerClickListener { marker ->
if (marker == userLocation) {
mPolygons.forEach { polygon ->
if(PolyUtil.containsLocation(userLocation?.position, polygon.points, false)) {
// Do Polygon stuff here
return@forEach
}
}
true
} else {
// Do optional marker stuff here
true
}
}
我的 android 应用程序使用 GoogleMap
和 Polygons
来显示用户感兴趣的区域。如果用户单击 Polygon
,则单击事件由 OnPolygonClickListener
处理,并显示一个信息对话框。我的问题在于显示用户当前位置的 Marker
阻止了传递给下面 Polygon
的点击事件。
旁注:标记的点击区域似乎也比可见区域大。这个圆圈实际上几乎挡住了它下面的整个正方形。
到目前为止我尝试了什么:
捕获点击事件并忽略它
getMap().setOnMarkerClickListener(new OnMarkerClickListener() { public boolean onMarkerClick(Marker marker) { return true; } });
在这种情况下不起作用,因为我们可以 return false 触发默认行为(放大标记)或 true 完全忽略点击事件,因为 - per documentation - 那里每次点击只有一个事件。
- 更改多边形的 z-index:不起作用,因为 - 再次根据文档 - "Markers are effectively considered to be in a separate z-index group compared to other overlays or shapes, regardless of the z-index of the other overlays" 所以点击事件总是首先传递给潜在标记。
那么有没有办法让 Polygon
低于 Marker
可点击或至少将可点击标记区域缩小到可见大小?
根据 MrUpsidown 的建议并使用 googlemaps PolyUtil 我实施了手动验证以手动触发 Polygon
有针对性的点击。当处理大量的多边形时,我无法说出 containsLocation()
的效率,但它暂时有效。
mMap.setOnMarkerClickListener { marker ->
if (marker == userLocation) {
mPolygons.forEach { polygon ->
if(PolyUtil.containsLocation(userLocation?.position, polygon.points, false)) {
// Do Polygon stuff here
return@forEach
}
}
true
} else {
// Do optional marker stuff here
true
}
}