リスト (firstVisibleItem
からlastVisibleItemsPrevious
.
これは、私のデータベースから一時的に割り当てるリストです
private List<MarkerOptions> mMarkers = new ArrayList<MarkerOptions>();
private int firstVisibleItemPrevious = 0;
private int lastVisibleItemsPrevious = 0;
//Loops, network commands, etc
// assign a marker per item
MarkerOptions markerOptions = new MarkerOptions()
.icon(BitmapDescriptorFactory.fromResource(R.drawable.marker))
.anchor(0.5f, 0.5f)
.visible(false)
.position(new LatLng( (Double) coords.get(1) , (Double) coords.get(0)));
mMarkers.add(position, markerOptions);
そして、これはマーカーの I/O がどのように行われるかです:
aListView.setOnScrollListener(new OnScrollListener() {
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
int lastVisibleItem = firstVisibleItem+visibleItemCount;
//if we have the markers from the DB and we notice a move do:
if( mMarkers.size() > 0 &&
(firstVisibleItemPrevious != firstVisibleItem ||
lastVisibleItemsPrevious != lastVisibleItem)
){
LatLngBounds.Builder builder = new LatLngBounds.Builder();
mMap.clear(); // clear the map to add new markers
for(int x = firstVisibleItem; x < lastVisibleItem; x++){
Marker mMarker = mMap.addMarker(mMarkers.get(x));
builder.include(mMarker.getPosition());
}
//animate
CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(builder.build(), 60);
mMap.animateCamera(cu);
firstVisibleItemPrevious = firstVisibleItem;
lastVisibleItemsPrevious = lastVisibleItem;
}
}
}
私の方法では、次の 3 つの問題があります。
- 1つ目は、マップを完全に消去することです(点滅)。
- 一部のマーカーは常に正しく割り当てられていません (理由がわかりません)。
- したがって、animateCamera は、すべての位置が正しくないように見えます。
builder
現在表示されているマップ (リスト) を確認し、新しいリストを確認してから、古いリストにないものを追加し、新しいリストにないものを削除する方法を試しました。しかし、それはまだ遅れていて、常にマーカーを追加することになり、「古い」マーカーを正しく削除しませんでした。私も試してみましたMarker.setVisibility()
が成功しませんでした。
この種の高速操作を処理するには、どうすればよいでしょうか? 非表示/表示操作のソースとして、少なくとも or のリストが必要であることに注意してください (動的に割り当てられます) List<MarkerOptions>
。List<LatLng>
List<Marker>