Android:Google Maps Clustermanager表现得非常奇怪。有时在完全缩放时,群集图标不会消失。为什么?

时间:2015-11-30 05:31:12

标签: android google-maps google-maps-markers google-maps-api-2 markermanager

我编写了以下方法来显示我的标记(聚集)。然而,一些集群工作正常 - 即当我放大时,蓝色集群图标(表示10+表示)消失并显示各个标记。 但是,有时候,当我完全放大时,蓝色群集标记仍会以完整缩放显示ALONG,并带有一个单独的标记。为什么会这样?

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);
       }
   }

1 个答案:

答案 0 :(得分:4)

DefaultClusterRenderer决定是否应该对这些标记进行聚类。该类包含DefaultClusterRenderer#shouldRenderAsCluster()方法 - 其中仅当聚类的大小为&gt;时才开始聚类。 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));
        ........
    }
}