安卓系统:谷歌地图集群管理器行为怪异.群集图标有时在完全缩放时不会消失.为什么?



我编写了以下方法来显示我的标记(集群)。然而,有些集群工作得很好——也就是说,当我放大时,蓝色集群图标(表示ex为10+)会消失,并显示单个标记。但是,有时,当我完全放大时,蓝色簇标记仍然与其中一个单独的标记一起显示在完全放大时。为什么会发生这种情况?

private void displayCluster(List<MyItem> items) {
      mClusterManager = new ClusterManager<MyItem>(this, googleMap);
      mClusterManager.setRenderer(new MyRender(getApplicationContext(),googleMap,mClusterManager));
      googleMap.setOnCameraChangeListener(mClusterManager);
      googleMap.setOnMarkerClickListener(mClusterManager);
       for (MyItem item : items) {
           mClusterManager.addItem(item);
       }
   }

DefaultClusterRenderer决定标记是否应该聚集。此类包含DefaultClusterRenderer#shouldRenderAsCluster()方法,其中只有当集群的大小大于MIN_cluster_size时,集群才会启动。MIN_CLUSTER_SIZE的默认值为4。

您需要扩展DefaultClusterRenderer类并重写shouldRenderAsCluster()方法来提供您自己的逻辑:

class CustomRenderer<T extends ClusterItem> extends DefaultClusterRenderer<T>
{
    public CustomRenderer(Context context, GoogleMap map, ClusterManager<T> clusterManager) {
        super(context, map, clusterManager);            
    }
    @Override
    protected boolean shouldRenderAsCluster(Cluster<T> cluster) {
        //start clustering if at least 2 items overlap
        //Change your logic here
        return cluster.getSize() > 1;
    }
}
private void setUpMapIfNeeded() {
    if (mMap != null) {
        return;
    }
    mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
    if (mMap != null) {
        mClusterManager = new ClusterManager<Place>(this, mMap);
        mClusterManager.setRenderer(new CustomRenderer<Place>(this, mMap, mClusterManager));
        ........
    }
}

最新更新