【发布时间】:2018-09-30 12:34:51
【问题描述】:
我有一个简单的应用程序,可以在地图(谷歌地图)上显示很多标记。目前我有超过 3,000 个标记,并且随着数据库变得越来越大,这个数字还在不断增长。
我也有几个复选框来指示要显示哪些标记,反之亦然。
最初我是这样添加每个标记的(在遍历每个位置的循环内)
Marker marker;
marker = mMap.addMarker (markerOptions);
mMarkerArrayList.add(marker);
然后,当用户与复选框交互时,我只是让标记可见/不可见。这样可以更快地删除和重新添加标记。 Checkbox Change Listener 中的代码是这样的:
for (Marker marker : mMarkerArrayList) {
if (condition) {
marker.setVisible(false);
}
}
然后在复选框的另一次更改时再次使其可见。
但是,在开始时单独添加所有这些标记需要很长时间(1-2 秒),并且由于标记只能在 UI 线程中添加,因此它冻结了 UI(包括我的进度条)时间。
经过大量研究,但一无所获,我唯一能做的就是使用 ClusterManager(android-maps-utils 库)添加标记。这加载速度是原来的两倍,并且不会阻塞我的 UI。 添加代码是这样的(这里 myLocation 是我的 MyLocation 类的对象,它保存每个点的位置和相关数据)。
for (MyLocation myLocation : mMyLocationArrayList) {
mClusterManager.addItem(myLocation)
}
现在的问题是将复选框链接到这些 ClusterItem 对象。我在库中找不到任何方法或字段来更改这些标记(ClusterItem)的可见性。在之前的方法中(改变可见性)几乎是瞬时的(足够快,用户不会感到任何滞后)。但是,现在,我每次都需要添加和删除这些标记,并且存在滞后,对用户来说非常明显。
有人有什么建议吗?
【问题讨论】:
标签: android google-maps