我编写了以下方法来显示我的标记(集群)。然而,有些集群工作得很好——也就是说,当我放大时,蓝色集群图标(表示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));
........
}
}