如何点击标记下方的GoogleMap多边形?

时间:2019-03-05 10:02:13

标签: android google-maps marker

我的android应用程序使用GoogleMapPolygons来显示用户感兴趣的区域。如果用户单击Polygon,则单击事件将由OnPolygonClickListener处理,并显示信息对话框。我的问题在于Marker显示了用户的当前位置,这阻止了将点击事件传递到下面的Polygon

enter image description here

侧面注:标记的单击区域似乎也大于可见区域。实际上,这个圆圈几乎挡住了下方的整个正方形。

到目前为止我尝试过的事情:

  • 捕获点击事件并忽略它

    getMap().setOnMarkerClickListener(new OnMarkerClickListener() {
        public boolean onMarkerClick(Marker marker) {
            return true;
        }
    });
    

在这种情况下不起作用,因为我们可以返回false触发默认行为(放大标记),或者返回true忽略单击事件,因为-per documentation-每次单击仅一个事件

  • 更改多边形的z-index:无效,因为-根据每个文档-“与其他叠加层或形状相比,标记被有效地认为是在单独的z-index组中,而不考虑标记的z-index其他重叠式广告”,因此始终将点击事件首先传递给潜在标记。

那么,有没有办法使Polygon下方的Marker可点击或至少将可点击标记区域减小到可见大小?

2 个答案:

答案 0 :(得分:0)

     GoogleMap.setOnPolygonClickListener(OnPolygonClickListener)

     GoogleMap mymap = ..//)init your app 
     mymap.setOnPolygonClickListener(new OnPolygonClickListener(){
     void onPolygonClick(Polygon polygon)
     {
     //do whatever you want with polygon 
     }  
     });

答案 1 :(得分:0)

根据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
            }
    }