Android:如果标记在地图上相互重叠,则会针对最后一个隐藏的标记触发click事件

Kha*_*lil 7 android google-maps click overlap marker

在我们的应用中,许多标记被绘制在不同的位置,并且在某些情况下在某个缩放级别,标记彼此重叠.因此,当我点击标记时,我希望顶部标记onMarkerClick被触发,但是它会针对最后一个隐藏标记触发,即最后一个标记,后面没有标记.

你有什么建议我这样做?此外,我没有信息窗口,因此我trueonMarkerClick方法返回.

Joh*_*ine 0

  1. 确定您的创客相对于整个屏幕的大小(例如 10%)。将其定义为名为 IMAGE_SIZE_RATIO 的浮点数

  2. 在向地图添加标记时维护列表标记。在 OnMarkerClickListener onMarkerClick 方法中,迭代其他标记并比较标记之间相对于当前可见地图尺寸和标记大小的距离。如下面的示例代码所示:

    静态最终浮点数 IMAGE_SIZE_RATIO = .15f;//定义标记相对于整个屏幕的大小
    私人无效setupListeners(){
    getMap().setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
    @覆盖
    公共布尔onMarkerClick(标记标记){
        LatLngBounds b = getMap().getProjection().getVisibleRegion().latLngBounds;
        浮动距离 = distanceBetweenPoints(b.northeast, b.southwest) * IMAGE_SIZE_RATIO;
        for (标记 m : 制造者 ) {
            if (marker.equals(m) ) { 继续; } //不要比较相同的
            if (distanceBetweenPoint(m.getPosition(),marker.getPosition()) {
                /*注意将 onMarkerClick 视为 Aynch 任务并继续
                如果还想对主要物体开火。
                */
                返回 onMarkerClick(m);
            }
        }
        // 在实际标记上执行您想要的操作。
    }
    ....(听众的其余部分)...      
    }       
    }
    protected Float getDistanceInMeters(LatLng a, LatLng b) {
        位置 l1 = 新位置("");
        位置 l2 = 新位置("");
        l1.setLatitude(a.latitude);
        l1.setLongitude(a.经度);
        l2.setLatitude(b.latitude);
        l2.setLongitude(b.经度);
        返回 l1.distanceTo(l2)
    }