我正在开发一个Android应用程序,我正在使用Google Maps Android API Utility Library。
更具体地说,我正在使用该库的集群部分。现在问我的问题:
我对地图上显示但目前尚未聚集的标记感兴趣。我尝试了不同的东西,但无法绕过它。那种工作方式是将所有渲染的标记项目保存在一个arraylist中,然后将标记位置与屏幕上地图的LatLng边界进行比较,如果标记位于屏幕边界内,则标记信息将添加到不同的arraylist中稍后将在列表视图中显示。问题是当我缩小时,标记仍然在 renderedPersonItems 数组中,并且即使这些标记现在已经聚集,它们也会显示在列表视图中。我无法清除 renderedPersonItems 数组,因为标记仅在生命周期中呈现一次。所以我正在寻找一个不同的解决方案。这是我到目前为止所得到的:
DefaultClusterRenderer中的代码:
@Override
protected void onBeforeClusterItemRendered(PersonItem personItem, MarkerOptions markerOptions){
markerOptions.title(personItem.personName);
if(!renderedPersonItems.contains(personItem)){
renderedPersonItems.add(personItem);
}
}
主要活动中的代码:
LatLngBounds personOnScreenBounds = googleMap.getProjection().getVisibleRegion().latLngBounds;
for(PersonItem person : clusterPersonRenderer.getRenderedPersonItems()){
if(PersonsOnScreenBounds.contains(person.getPosition())){
personMarksOnScreen.add(getPersonObjectWithId(person.personId));
}
}
提前致谢!
答案 0 :(得分:1)
我可以推荐你另一个很酷的android-map库。 Android Maps Extensions https://github.com/mg6maciej/android-maps-extensions
我在我的应用程序中使用它看起来很好。在您的应用中重新实现它可能并不容易,但您可以尝试。
要解决您的问题,您可以制作以下内容:
List<Marker> markers = mMap.getDisplayedMarkers();
for (Marker marker : markers) {
if(!marker.isCluster()) {
//
}
}
答案 1 :(得分:0)
如果要执行不同的任务,可能需要在群集和单个标记上创建不同的onClick事件:
此方法将处理对群集项目的点击
public boolean onClusterClick(Cluster<Person> cluster) {
// Show a toast with some info when the cluster is clicked.
Toast.makeText(getActivity(), cluster.getSize() + " (including " + itemText + ")", Toast.LENGTH_SHORT).show();
return true;
}
如果标记未聚集(具有单个项目),此方法将处理onClick事件
public boolean onClusterItemClick(Person item) {
// Handles events for single markers
String text = item.text;
return true
}