我正在尝试实施Google Maps Android Marker Clustering Utility。我遇到的问题是在最大缩放时重叠ClusterItems。我的解决方案是:通过扩展DefaultClusterRenderer创建自定义渲染器。然后在最大缩放时阻止聚类,然后在最大缩放时允许ClusterItems可拖动(否则禁止拖动)。
@Override
protected void onBeforeClusterItemRendered(MarkerList.Markers markers, MarkerOptions markerOptions) {
mImageView.setImageBitmap(getImage(markers));
Bitmap icon = mIconGenerator.makeIcon();
markerOptions.icon(BitmapDescriptorFactory.fromBitmap(icon)).title(markers.getEntity().getPostType());
//allow user to drag overlapping ClusterItems to inspect individually
if(MAX_CAMERA_ZOOM <= cameraZoom){
markerOptions.draggable(true);
}else{
markerOptions.draggable(false);
}
}
@Override
protected boolean shouldRenderAsCluster(Cluster cluster) {
//Never render clusters at max zoom
if (MAX_CAMERA_ZOOM <= cameraZoom ) {
return false;
} else {
return cluster.getSize() > 2;
}
}
这将在我的手机上工作一段时间,然后群集停止并且拖动的ClusterItems变为永久性,以便显示的ClusterItems数量增加(同一项目的许多副本在地图上)。新拖动的ClusterItems不可点击,因此我认为它们只是未被删除的图标。任何人都可以帮我找到解决方案吗?我猜我需要在拖动后以编程方式删除拖动的图标。虽然任何解决我的问题的建议都会受到赞赏。
答案 0 :(得分:1)
好吧,问题似乎是由于MapFragment被暂停而渲染器没有删除Map上的额外ClusterItems。所以在onPause中调用map.clear似乎已经修复了额外的ClusterItems的问题。
@Override
public void onPause() {
//Clear lost ClusterItems
if (mMap != null) {
mMap.clear();
}
if (mGoogleApiClient.isConnected()) {
mGoogleApiClient.disconnect();
}
super.onPause();
mMapView.onPause();
}
这有效,但我不确定为什么这些项目会丢失,我猜这个问题与暂停MapFragment而不是拖动ClusterItem有关,因此我会更改标题以反映这一点。