UPDATE (3 years after original answer was posted :D)
As pointed out by @schaenk, DefaultClusterRenderer
now has setMinClusterSize(int)
method which does the same thing.
ORIGINAL ANSWER
The class responsible for making a decision about clustering/not clustering an item is DefaultClusterRenderer
. If you look at DefaultClusterRenderer#shouldRenderAsCluster()
method - you will see that it starts clustering only when size of cluster is > MIN_CLUSTER_SIZE
. In our case MIN_CLUSTER_SIZE = 4
.
Unfortunately you cannot change this constant dynamically, so you need to extend DefaultClusterRenderer
class and override shouldRenderAsCluster()
method to provide your own logic:
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
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));
........
}
}