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)
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)
| 归档时间: |
|
| 查看次数: |
1278 次 |
| 最近记录: |