1

マーカーを表示する(クラスター化された)次のメソッドを作成しました。ただし、クラスターの一部は正常に動作します。つまり、ズームインすると、青いクラスター アイコン (ex の場合は 10+ と表示) が消え、個々のマーカーが表示されます。ただし、完全にズームインすると、青色のクラスター マーカーが個々のマーカーの 1 つと共にフル ズームで表示されることがあります。なぜこうなった?

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

1 に答える 1

6

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));
        ........
    }
}
于 2015-11-30T06:29:08.170 に答える