【发布时间】:2015-12-30 18:53:54
【问题描述】:
我正在使用来自android-maps-utils 的聚类对 Android 中的 Google 地图上的标记进行聚类。我想在地图处于最大缩放级别时禁用集群(即,如果地图处于最大缩放级别,则始终渲染单个 ClusterItem,否则集群正常)。
我几乎可以通过在扩展 DefaultClusterRenderer 的自定义类中对 shouldRenderAsCluster() 中的缩放级别进行测试来使其正常工作。但是,我的解决方案比实际缩放级别落后了一步。例如,如果地图的最大缩放级别为 21 级,并且用户从 20 级放大到 21 级,则 shouldRenderAsCluster 中的检查将获得当前缩放级别 20。如果用户随后缩小到 20 级,检查将达到 21 级。ClusterItems 被渲染为我想要的单个项目,但是一个缩放操作为时已晚。
我从 DefaultClusterRenderer 中设置的变量 mZoom 中获得“当前缩放”(显然不是当前的)。
这是代码:
public class UserClusterRenderer extends PosMapDefaultClusterRenderer<UserClusterItem> {
// ...
@Override
protected boolean shouldRenderAsCluster(Cluster cluster) {
return mZoom < mMap.getMaxZoomLevel() && cluster.getSize() > 1;
}
}
变量 mZoom 和 mMap 在 DefaultClusterRenderer 中设置。因为他们在那里有私有访问权限,所以我制作了一个名为 PosMapDefaultClusterRenderer 的 DefaultClusterRenderer 副本。唯一的区别是 mZoom 和 mMap 被声明为 protected,因此它们可以在 UserClusterRenderer 中访问。
为什么 mZoom 落后一个缩放动作?有没有办法获得渲染集群的真实缩放级别?
缩放是通过使用来自 cameraPosition 的 cameraUpdate 调用 animateCamera 来完成的。
这也是我在 StackOverflow 上的第一个问题,因此欢迎任何关于标签、格式等的输入。
编辑:Vai 回答后的工作代码:
public class UserClusterRenderer extends DefaultClusterRenderer<UserClusterItem> {
GoogleMap mMapCopy; // Store a ref to the map here from constructor
// ...
@Override
protected boolean shouldRenderAsCluster(Cluster cluster) {
float currentZoom = mMapCopy.getCameraPosition().zoom;
float currentMaxZoom = mMapCopy.getMaxZoomLevel();
return currentZoom < currentMaxZoom && cluster.getSize() > 1;
}
}
【问题讨论】:
-
你解决了吗?
标签: java android google-maps google-maps-android-api-2 android-maps-utils