Я хочу, чтобы выполнить быстро добавить/удалить или скрыть шоу маркеры/на основе списка (диапазон между firstVisibleItem
и lastVisibleItemsPrevious
.Ручка быстро добавить/удалить маркер команды/Google Maps v2 + ScrollListener
Это список, назначить из моей базы данных на временно
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;
}
}
}
с моим методом у меня есть три proble мс:
- Во-первых, я полностью очищаю карту (мигает).
- Некоторые маркеры не всегда назначаются правильно (я не могу понять, почему).
- Поэтому animateCamera выглядит она не правильно все позиции
builder
Я попытался метод проверки текущих видимых карт (список) и проверьте новый список, а затем добавить те, которые не в старый список и удалить те, которые не находятся в новом списке. Однако он был все еще лагги, и я закончил тем, что добавлял всегда маркеры и неправильно удалял «старые». Я также пробовал с Marker.setVisibility()
без успеха.
Что может быть хорошим способом справиться с такими быстрыми операциями? Помня о том, что я должен хотя бы иметь список List<MarkerOptions>
или List<LatLng>
или List<Marker>
как источник для операции hide/show (назначается динамически).