You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Osmbonuspack:自定义Marker加入RadiusMarkerClusterer后onDoubleTap失效

问题分析与解决方案

当自定义Marker加入RadiusMarkerClusterer后双击事件失效,核心原因是聚类器接管了触摸事件的分发逻辑:

  • 若Marker被合并到集群中,双击事件会被集群视图拦截,不会传递给单个Marker;
  • 即使Marker未被聚类,聚类器的事件处理优先级也会高于单个Marker的onDoubleTap方法,导致事件被提前消费。

解决步骤

1. 自定义聚类器,透传双击事件给单个Marker

重写RadiusMarkerClusterer的onDoubleTap方法,先判断点击目标是否为未聚类的自定义Marker,若是则手动触发其onDoubleTap逻辑:

public class CustomRadiusMarkerClusterer extends RadiusMarkerClusterer {

    public CustomRadiusMarkerClusterer(Context context) {
        super(context);
    }

    @Override
    public boolean onDoubleTap(MotionEvent e, MapView mapView) {
        // 遍历所有Marker,检查是否点击到可见的自定义Marker
        for (Marker marker : getMarkers()) {
            if (marker instanceof CustomMarker && marker.isVisible()) {
                CustomMarker customMarker = (CustomMarker) marker;
                // 调用Marker自身的hitTest判断是否命中
                if (customMarker.hitTest(e, mapView)) {
                    return customMarker.onDoubleTap(e, mapView);
                }
            }
        }
        // 若点击的是集群,执行聚类器默认逻辑
        return super.onDoubleTap(e, mapView);
    }
}

2. 验证hitTest方法的有效性

聚类环境下,Marker的绘制层级或位置计算可能变化,需确保CustomMarker的hitTest方法能正确识别点击区域:

  • 检查方法中是否使用了Marker当前的实际坐标(而非初始坐标);
  • 确认点击区域的计算未受聚类器的缩放、偏移影响。

3. 调整聚类策略(可选)

若业务允许,可通过调整聚类器的半径或最小聚类数量,避免目标Marker被合并到集群中:

CustomRadiusMarkerClusterer clusterer = new CustomRadiusMarkerClusterer(context);
clusterer.setRadius(50); // 缩小聚类半径,减少Marker被聚类的概率
clusterer.setMinClusterSize(3); // 设置最小聚类数量,低于该值的Marker不会被聚类

内容的提问来源于stack exchange,提问作者Bader-Eddine Qodia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 12:05:20