Android:Google Maps Clustermanager的行为异常。在完全缩放时,群集图标有时不会消失。为什么?

Zac*_*ac1 1 android google-maps google-maps-markers google-maps-api-2 markermanager

我编写了以下方法来显示我的标记(群集)。但是,某些聚类可以正常工作-即,当我放大时,蓝色聚类图标(表示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);
       }
   }
Run Code Online (Sandbox Code Playgroud)

Sun*_*nny 5

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));
        ........
    }
}
Run Code Online (Sandbox Code Playgroud)