我有一個包含LatLng
作爲其中一個屬性的我的CustomClass約2000個元素的列表。所以基本上我想放棄地圖上的所有2000個標記,但是放棄所有標記會使地圖變得遲緩。所以我決定實現地圖的延遲加載。我有一個HashMap,它包含在可見區域中放置的標記。以下是我如何實現它。在新線程上放置標記
我遍歷我的列表並檢查該項目的LatLng
座標是否在可見範圍內。我使用LatLngBounds.contains()
方法來做到這一點。如果項目的座標位於可見區域,那麼我放下標記並將其添加到HashMap中。如果物品的座標不在可見區域,則不應該放在地圖上,如果它存在,我會將其從地圖上移除。
下面的代碼是在onCameraIdleListener()
和獲取/出
for (Event event: listOfEvents) {
LatLng latLng = event.getCoordinates();
LatLngBounds bounds = mMap.getProjection().getVisibleRegion().latLngBounds;
boolean isMarkerOnMap = markerksOnMap.contains(latLng);
if bounds.contains(latLng) {
if (!isMarkerOnMap) {
// add marker
markersOnMap.add(latLng);
}
}
else if (isMarkerOnMap) {
// remove marker
markersOnMap.remove(latLng);
}
}
這上面的作品代碼執行每次地圖移動或zoommed但我的地圖仍然laggy。會發生什麼情況是地圖移動時,for循環遍歷2000個元素,並且循環需要幾秒鐘來處理。發生這種情況時,地圖凍結,我無法移動地圖或放大/縮小。
我應該將for循環放入異步線程嗎?任何示例代碼將不勝感激。