Android Google 地图 Api 在放大时不会取消聚类
Android Google maps Api doesn't uncluster while zoom in
我创建了 Custom Cluster Render
扩展 DefaultClusterRenderer<T>
,同时使用 Google Maps Api
和 android maps utils
。根据以下指南
https://github.com/googlemaps/android-maps-utils/blob/master/demo/src/com/google/maps/android/utils/demo/CustomMarkerClusteringDemoActivity.java
当我在同一区域有太多 markers
时,它们会聚集在一起。但是在缩放时不要分离到 markers
,我可以看到
http://cs627121.vk.me/v627121202/51eb5/rY9f4p8ivos.jpg
这是一些代码:
public PlaceRender(Context context, GoogleMap map, ClusterManager<MyCluster> clusterManager) {
super(context, map, clusterManager);
mIconGenerator = new IconGenerator(context);
imageView = new ImageView(context);
mClusterImageView = new ImageView(context);
mIconGenerator.setContentView(imageView);
this.context = context;
this.map = map;
this.myClusterManager = clusterManager;
}
@Override
protected void onBeforeClusterItemRendered(MyCluster cluster, MarkerOptions markerOptions) {
super.onBeforeClusterItemRendered(cluster, markerOptions);
markerOptions.title(cluster.name).snippet(cluster.snippet);
markerOptions.infoWindowAnchor(0.5f, 0.0f);
}
@Override
protected void onBeforeClusterRendered(Cluster<MyCluster> cluster, MarkerOptions markerOptions) {
super.onBeforeClusterRendered(cluster, markerOptions);
}
@Override
protected boolean shouldRenderAsCluster(Cluster cluster) {
// Always render clusters.
return cluster.getSize() > 1;
}
@Override
protected void onClusterRendered(Cluster<MyCluster> cluster, Marker marker){
super.onClusterRendered(cluster, marker);
}
@Override
protected void onClusterItemRendered(MyCluster geo, Marker marker) {
super.onClusterItemRendered(geo, marker);
loadIconFromApi(geo, marker);
}
public void addItems(List<MyCluster> clusters, Context context, GoogleMap map) {
myClusterManager = new ClusterManager<>(context, map);
map.setOnMarkerClickListener(this);
for (int i = 0; i < clusters.size(); i++) {
myClusterManager.addItem(clusters.get(i));
myClusterManager.setRenderer(new PlaceRender(context, map, myClusterManager));
}
myClusterManager.cluster();
}
//
private void loadIconFromApi(MyCluster geo, Marker marker) {
PicassoMarker markers = new PicassoMarker(marker, mIconGenerator, imageView);
geo.setPicassoMarker(markers);
Picasso.with(context).load(geo.image).into(markers);
}
@Override
public boolean onMarkerClick(Marker marker) {
marker.showInfoWindow();
return true;
}
如果我使用 15x camera zoom
,那么我可以看到每个标记,然后 zoom out
,我的标记将不会合并到 cluster
。
我错过了什么?
由于您设置的条件,您的 shouldRenderAsCluster()
始终在聚类。
cluster.getSize() > 1;
您可以在 here
上查看类似的 SO post
此外,请尝试查看此 post。发现您正在使用 PicassoMarker 库,这可能也影响了您的集群渲染。
我需要添加这个函数并在 onCameraChange
中调用它
public void updateUI(List<MyCluster> clusters) {
myClusterManager.clearItems();
for (int i = 0; i < clusters.size(); i++) {
myClusterManager.addItem(clusters.get(i));
// myClusterManager.setRenderer(new PlaceRender(context, map, myClusterManager));
}
myClusterManager.onCameraChange(map.getCameraPosition());
}
我创建了 Custom Cluster Render
扩展 DefaultClusterRenderer<T>
,同时使用 Google Maps Api
和 android maps utils
。根据以下指南
https://github.com/googlemaps/android-maps-utils/blob/master/demo/src/com/google/maps/android/utils/demo/CustomMarkerClusteringDemoActivity.java
当我在同一区域有太多 markers
时,它们会聚集在一起。但是在缩放时不要分离到 markers
,我可以看到
http://cs627121.vk.me/v627121202/51eb5/rY9f4p8ivos.jpg
这是一些代码:
public PlaceRender(Context context, GoogleMap map, ClusterManager<MyCluster> clusterManager) {
super(context, map, clusterManager);
mIconGenerator = new IconGenerator(context);
imageView = new ImageView(context);
mClusterImageView = new ImageView(context);
mIconGenerator.setContentView(imageView);
this.context = context;
this.map = map;
this.myClusterManager = clusterManager;
}
@Override
protected void onBeforeClusterItemRendered(MyCluster cluster, MarkerOptions markerOptions) {
super.onBeforeClusterItemRendered(cluster, markerOptions);
markerOptions.title(cluster.name).snippet(cluster.snippet);
markerOptions.infoWindowAnchor(0.5f, 0.0f);
}
@Override
protected void onBeforeClusterRendered(Cluster<MyCluster> cluster, MarkerOptions markerOptions) {
super.onBeforeClusterRendered(cluster, markerOptions);
}
@Override
protected boolean shouldRenderAsCluster(Cluster cluster) {
// Always render clusters.
return cluster.getSize() > 1;
}
@Override
protected void onClusterRendered(Cluster<MyCluster> cluster, Marker marker){
super.onClusterRendered(cluster, marker);
}
@Override
protected void onClusterItemRendered(MyCluster geo, Marker marker) {
super.onClusterItemRendered(geo, marker);
loadIconFromApi(geo, marker);
}
public void addItems(List<MyCluster> clusters, Context context, GoogleMap map) {
myClusterManager = new ClusterManager<>(context, map);
map.setOnMarkerClickListener(this);
for (int i = 0; i < clusters.size(); i++) {
myClusterManager.addItem(clusters.get(i));
myClusterManager.setRenderer(new PlaceRender(context, map, myClusterManager));
}
myClusterManager.cluster();
}
//
private void loadIconFromApi(MyCluster geo, Marker marker) {
PicassoMarker markers = new PicassoMarker(marker, mIconGenerator, imageView);
geo.setPicassoMarker(markers);
Picasso.with(context).load(geo.image).into(markers);
}
@Override
public boolean onMarkerClick(Marker marker) {
marker.showInfoWindow();
return true;
}
如果我使用 15x camera zoom
,那么我可以看到每个标记,然后 zoom out
,我的标记将不会合并到 cluster
。
我错过了什么?
由于您设置的条件,您的 shouldRenderAsCluster()
始终在聚类。
cluster.getSize() > 1;
您可以在 here
上查看类似的 SO post此外,请尝试查看此
我需要添加这个函数并在 onCameraChange
public void updateUI(List<MyCluster> clusters) {
myClusterManager.clearItems();
for (int i = 0; i < clusters.size(); i++) {
myClusterManager.addItem(clusters.get(i));
// myClusterManager.setRenderer(new PlaceRender(context, map, myClusterManager));
}
myClusterManager.onCameraChange(map.getCameraPosition());
}