這是我的解決方案。它工作得很好,只渲染可見物品。 我用相機改變監聽器重新渲染,現在變成了可見的物品:
private void onBeforeClusterOrClusterItemRendered(final Cluster<MediaItem> cluster, final MediaItem mediaItem, final MarkerOptions markerOption
if(!isAdded())
return;
// In visible area?
Marker marker = cluster == null ? getMarker(mediaItem) : getMarker(cluster);
Boolean isInBounds = isInBounds(marker != null ? marker.getPosition() : mediaItem.getPosition(), null);
if(isInBounds) {
// ...
}
}
private Boolean isInBounds(LatLng position, LatLngBounds latLngBounds) {
return (latLngBounds == null ? mMap.getProjection().getVisibleRegion().latLngBounds : latLngBounds).contains(position);
}
@Override
protected void onBeforeClusterItemRendered(final MediaItem mediaItem, final MarkerOptions markerOptions) {
onBeforeClusterOrClusterItemRendered(null, mediaItem, markerOptions);
}
@Override
protected void onBeforeClusterRendered(final Cluster<MediaItem> cluster, final MarkerOptions markerOptions) {
final MediaItem mediaItem = MediaPicker.getBestRated(new ArrayList<>(cluster.getItems()));
onBeforeClusterOrClusterItemRendered(cluster, mediaItem, markerOptions);
}
...
// Re render
mMap.setOnCameraChangeListener(new GoogleMap.OnCameraChangeListener() {
@Override
public void onCameraChange(CameraPosition cameraPosition) {
mClusterManager.onCameraChange(cameraPosition);
final LatLngBounds latLngBounds = mMap.getProjection().getVisibleRegion().latLngBounds;
// Cluster only
Collection<Marker> clusters = mClusterManager.getClusterMarkerCollection().getMarkers();
for(Marker marker : clusters) {
if(isInBounds(marker.getPosition(), latLngBounds))
onBeforeClusterRendered(getCluster(marker), new MarkerOptions());
}
// Cluster item only
Collection<Marker> markers = mClusterManager.getMarkerCollection().getMarkers();
for(Marker marker : markers) {
if(isInBounds(marker.getPosition(), latLngBounds))
onBeforeClusterItemRendered(getClusterItem(marker), new MarkerOptions());
}
}
});
你怎麼就聚集標記加載圖像?任何示例代碼。謝謝。 – ZZzzZZzz