我正在开发一个android应用程序,我正在使用谷歌地图android API实用程序库。
更具体地说,我使用的是该库的集群部分。现在回答我的问题:
我对地图上显示但目前未聚集的标记感兴趣。我试过不同的东西,但就是不明白。这类工作是保存所有渲染的标记项目在数组列表中,然后比较标记位置的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));
}
}
提前感谢!
我可以向你推荐另一个很酷的android地图库。Android地图扩展https://github.com/mg6maciej/android-maps-extensions
我用它在我的应用程序,它看起来很好。在你的应用程序中重新实现它可能不容易,但你可以尝试一下。
要解决这个问题,你可以这样写:
List<Marker> markers = mMap.getDisplayedMarkers();
for (Marker marker : markers) {
if(!marker.isCluster()) {
//
}
}
如果你想执行不同的任务,你可能想在集群和单个标记上创建不同的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
}