private LatLng calculateClusterPosition() { LatLngBounds.Builder builder = LatLngBounds.builder(); for (DelegatingMarker m : markers) { builder.include(m.getPosition()); } return builder.build().getCenter(); }
void refresh() { int count = markers.size(); if (count == 0) { removeVirtual(); } else if (count < strategy.getMinMarkersCount()) { removeVirtual(); for (DelegatingMarker m : markers) { m.changeVisible(true); } } else { for (DelegatingMarker m : markers) { m.changeVisible(false); } LatLng position = calculateClusterPosition(); if (virtual == null || lastCount != count) { removeVirtual(); lastCount = count; virtual = strategy.createMarker(new ArrayList<Marker>(markers), position); } else { virtual.setPosition(position); } } }