0

Я хочу, чтобы выполнить быстро добавить/удалить или скрыть шоу маркеры/на основе списка (диапазон между 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 (назначается динамически).

ответ

0

ошибка была в

mMarkers.add(position, markerOptions); 

Он толкал список.