Android 获取未聚集的标记
Posted
技术标签:
【中文标题】Android 获取未聚集的标记【英文标题】:Android Get the markers that are not clustered 【发布时间】:2015-10-23 06:20:53 【问题描述】:我正在开发一个安卓应用程序,我正在使用Google Maps android API Utility Library。
更具体地说,我正在使用该库的集群部分。现在回答我的问题:
我对地图上显示但当前未聚集的标记感兴趣。我尝试过不同的东西,但无法理解它。这种工作方式是将所有渲染的标记项保存在数组列表中,然后将标记位置与屏幕上地图的 LatLng 边界进行比较,如果标记在屏幕边界内,则标记信息将添加到不同的数组列表中稍后显示在列表视图中。问题是当我缩小时,标记仍在 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));
提前致谢!
【问题讨论】:
【参考方案1】:我可以向你推荐另一个很酷的 android-map 库。 Android 地图扩展https://github.com/mg6maciej/android-maps-extensions
我在我的应用程序中使用它,它看起来不错。在您的应用中重新实现它可能并不容易,但您可以尝试。
要解决您的问题,您可以这样做:
List<Marker> markers = mMap.getDisplayedMarkers();
for (Marker marker : markers)
if(!marker.isCluster())
//
【讨论】:
我现在已经检查了那个库,它似乎有我需要的一切,现在我需要找点时间重写我的代码,谢谢! :)【参考方案2】:如果您想执行不同的任务,您可能希望在集群标记和单个标记上创建不同的 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
【讨论】:
好吧,在这种情况下,我不是在寻找执行不同的点击任务。我只是在寻找未聚集但在屏幕范围内的标记。以上是关于Android 获取未聚集的标记的主要内容,如果未能解决你的问题,请参考以下文章