3

我正在开发一个 android 应用程序,我正在使用Google Maps Android API Utility Library

更具体地说,我正在使用该库的集群部分。现在我的问题:

我对地图上显示但当前未聚集的标记感兴趣。我尝试了不同的东西,但无法理解它。这种工作方式是将所有渲染的标记项保存在数组列表中,然后将标记位置与屏幕上地图的 LatLng 边界进行比较,如果标记在屏幕边界内,则标记信息将添加到不同的数组列表中稍后显示在列表视图中。问题是当我缩小时,标记仍位于renderPersonItems数组中,即使这些标记现在已聚集,也会显示在列表视图中。我无法清除renderPersonItems数组导致标记在生命周期中仅呈现一次。所以我正在寻找不同的解决方案。这是我到目前为止得到的:

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));
   }
}

提前致谢!

4

2 回答 2

1

我可以向您推荐另一个很酷的 android-map 库。Android 地图扩展https://github.com/mg6maciej/android-maps-extensions

我在我的应用程序中使用它,它看起来不错。在您的应用程序中重新实现它可能并不容易,但您可以尝试。

要解决您的问题,您可以执行以下操作:

List<Marker> markers = mMap.getDisplayedMarkers();
for (Marker marker : markers) {
    if(!marker.isCluster()) {
        //
    }
}
于 2015-08-05T11:31:57.703 回答
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
}
于 2015-07-31T17:56:20.640 回答