私はカスタムクラスの約2000個の要素のリストを持っています。これはLatLng
という属性の1つです。だから基本的に私は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され実行されますが、私のマップは、まだラグです。何が起こるかは、マップが移動され、forループが2000要素を反復処理し、ループが処理されるまでに数秒かかることです。それが起こっている間、地図はフリーズし、地図を移動したり、ズームイン/ズームアウトすることはできません。
forループを非同期スレッドに入れる必要がありますか?どのようなコード例も理解できます。