【问题标题】:Android googlemaps clustering how to exclude one markerAndroid googlemaps聚类如何排除一个标记
【发布时间】:2016-05-16 12:42:54
【问题描述】:

有没有办法从聚类中排除一个选定的标记?

这是我的渲染器类

private class StoreRenderer extends DefaultClusterRenderer<Store> {
    HashMap<Store, Marker> storeMarkerMap = new HashMap<Store, Marker>();
    public StoreRenderer(Context context, GoogleMap map, ClusterManager<Store> clusterManager) {
        super(context, map, clusterManager);
    }

    public Marker getMarkerFromStore(Store clusterItem) {
        return storeMarkerMap.get(clusterItem);
    }

    public void removeMarkerFromStore(Store itemToRemove) {
        storeMarkerMap.remove(itemToRemove);
    }


    @Override
    protected void onBeforeClusterItemRendered(Store item, MarkerOptions markerOptions) {
        super.onBeforeClusterItemRendered(item, markerOptions);
        markerOptions.icon(BitmapDescriptorFactory.fromResource(item.getMainCategoryResourceImage()));
    }

    @Override
    protected void onClusterItemRendered(Store clusterItem, Marker marker) {
        super.onClusterItemRendered(clusterItem, marker);
        storeMarkerMap.put(clusterItem, marker);
    }
    @Override
    protected boolean shouldRenderAsCluster(Cluster cluster) {
        return cluster.getSize() > 3;
    }

    public HashMap<Store, Marker> getStoreMarkerMap() {
        return storeMarkerMap;
    }
}

我正在添加所有这样的商店

ClusterManager<Store> mClusterManager = new ClusterManager<Store>(getContext(), map);
StoreRenderer renderer = new StoreRenderer(getContext(), my_map, mClusterManager);
mClusterManager.setRenderer(renderer);
.....
mClusterManager.addItem(temp);

mClusterManager.setOnClusterItemClickListener(new ClusterManager.OnClusterItemClickListener<Store>() {
        @Override
        public boolean onClusterItemClick(Store storeClusterItem) {
            markerClicked(storeClusterItem);
            return true;
        }
    });

如何从聚类中排除点击的标记?

【问题讨论】:

  • 你找到答案了吗?

标签: android google-maps markerclusterer


【解决方案1】:

关于删除集群中的项目有很多解决方法。

  • 使用 GridBasedAlgorithm,因为它支持删除元素。

在这个 SO question 中,社区提供了一些解决方法,例如 GridBasedAlgorithm 和一些自己的 code implementation,用于删除集群中的标记。

我希望这能澄清一些事情。 :)

【讨论】:

    【解决方案2】:

    这是我使用的解决方案。

    clusterManager = ClusterManager(requireContext(), myMap, object : MarkerManager(myMap) {
                override fun onMarkerClick(marker: Marker): Boolean {
                    val result = super.onMarkerClick(marker)
                    return if (result) true // cluster marker clicked
                    else {
                        //other marker click handled
                        true
                    }
                }
            })
        
            clusterManager?.let { clsManager ->
                clsManager.setOnClusterItemClickListener { marker ->
                    //marker in cluster clicked
                    return@setOnClusterItemClickListener true //super.onMarkerClick(marker) returned true
                }   
                myMap.setOnMarkerClickListener(clsManager)
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-04
      • 2018-03-03
      • 2017-07-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多