GoogleMap map = getMap(); //obtient la carte via l’activité courante LatLngBounds bounds = _map.getProjection().getVisibleRegion().latLngBounds; 

boolean isVisible = bounds.contains(friend.getPosition());
if(isVisible){
MarkerOptions markerOptions = new MarkerOptions(); Marker addedMarker = _map.addMarker(markerOptions);
}

LatLngBounds mapBounds = _map.getProjection().getVisibleRegion().latLngBounds; 		for (Marker marker : _allMarkers) {
			if (mapBounds.contains(marker.getPosition())) { 				if (!_markersOnMap.contains(marker)) {
		Marker addedMarker = _map.addMarker(new MarkerOptions());                 			_markersOnMap.add(addedMarker);		   			     }
			} else {
				if (_markersOnMap.contains(marker)) {							marker.remove();							                _markersOnMap.remove(marker);
				} 			} 		}

LatLngBounds mapBounds = _map.getProjection().getVisibleRegion().latLngBounds; LatLngBounds visibleBounds = GeoHelper.extendLimits(bounds, 3); for (Marker marker : _allMarkers) { etc…

public static LatLngBounds extendLimits(LatLngBounds bounds, int ratio) {
double extendedLongitude = Math.abs(bounds.northeast.longitude
				- bounds.southwest.longitude)/ ratio;
double extendedLatitude = Math.abs(bounds.northeast.latitude
				- bounds.southwest.latitude)/ ratio;
LatLng topRight = null; LatLng bottomLeft = null;
// Longitudes double topRightLongitude = bounds.northeast.longitude				+ extendedLongitude;
double bottomLeftLongitude = bounds.southwest.longitude				- extendedLongitude;
// latitudes double topRightLatitude = bounds.northeast.latitude +   extendedLatitude;
double bottomLeftLatitude = bounds.southwest.latitude - extendedLatitude;
topRight = new LatLng(topRightLatitude, topRightLongitude);
bottomLeft = new LatLng(bottomLeftLatitude, bottomLeftLongitude);
return new LatLngBounds(bottomLeft, topRight);
}

@Override     	public void onCameraChange(CameraPosition cameraPosition) {
if (mRenderer instanceof GoogleMap.OnCameraChangeListener) { ((GoogleMap.OnCameraChangeListener)mRenderer).onCameraChange(cameraPosition);
        }
        // Don't re-compute clusters if the map has just been panned/tilted/rotated.
        CameraPosition position = mMap.getCameraPosition();
        if (mPreviousCameraPosition != null && mPreviousCameraPosition.zoom == position.zoom) {
            return;
        }
        mPreviousCameraPosition = mMap.getCameraPosition();
        cluster();
    }