我编写了以下方法来显示我的标记(聚集)。然而,一些集群工作正常 - 即当我放大时,蓝色集群图标(表示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);
}
}
答案 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));
........
}
}