Définition du niveau de zoom maximal dans l'api android v2 de google maps
je travaille actuellement sur le développement d'applications en utilisant Google maps API android v2. Mon code est le suivant. Supposons que map dispose de plusieurs marqueurs et zoomez pour afficher tous les marqueurs sur l'écran.
LatLngBuilder.Builder builder = LatLngBounds.builder();
for(Marker m : markers){
builder.include(m.getPosition());
}
LatLngBounds bounds = builder.build();
map.animateCamera(CameraUpdateFactory.newLatLngBounds(bounds, 10);
ce code fonctionne bien mais je veux arrêter d'animer quand le niveau de zoom atteint 17.0 f; Il semble que l'API map ne dispose pas d'une telle méthode pour contrôler le niveau de zoom. Quelqu'un sait de toute idée pour résoudre ce problème?
16 réponses
Je n'ai pas trouvé de solution directe dans L'API GoogleMaps. Une solution potentielle à ce problème consiste à écouter contre le OnCameraChange événement: chaque fois que cet événement se déclenche et que le niveau de zoom est au-dessus du niveau de zoom maximum, il est possible d'appeler animateCamera (). Le code résultant serait la suivante:
@Override
public void onCameraChange(CameraPosition position) {
float maxZoom = 17.0f;
if (position.zoom > maxZoom)
map_.animateCamera(CameraUpdateFactory.zoomTo(maxZoom));
}
Un récent mise à jour pour l'API Google Maps introduit les fonctions dont vous avez besoin:
GoogleMap.setMaxZoomPreference()
GoogleMap.setMinZoomPreference()
il n'empêche pas toujours l'animation de jouer, cependant.
voici le code Java correspondant pour la solution D'Arvis qui a bien fonctionné pour moi:
private LatLngBounds adjustBoundsForMaxZoomLevel(LatLngBounds bounds) {
LatLng sw = bounds.southwest;
LatLng ne = bounds.northeast;
double deltaLat = Math.abs(sw.latitude - ne.latitude);
double deltaLon = Math.abs(sw.longitude - ne.longitude);
final double zoomN = 0.005; // minimum zoom coefficient
if (deltaLat < zoomN) {
sw = new LatLng(sw.latitude - (zoomN - deltaLat / 2), sw.longitude);
ne = new LatLng(ne.latitude + (zoomN - deltaLat / 2), ne.longitude);
bounds = new LatLngBounds(sw, ne);
}
else if (deltaLon < zoomN) {
sw = new LatLng(sw.latitude, sw.longitude - (zoomN - deltaLon / 2));
ne = new LatLng(ne.latitude, ne.longitude + (zoomN - deltaLon / 2));
bounds = new LatLngBounds(sw, ne);
}
return bounds;
}
You may find it useful to set a prefered minimum and/or maximum zoom level. For example, this is useful to control the user's experience if your app shows a defined area around a point of interest, or if you're using a custom tile overlay with a limited set of zoom levels.
private GoogleMap mMap;
// Set a preference for minimum and maximum zoom.
mMap.setMinZoomPreference(6.0f);
mMap.setMaxZoomPreference(14.0f);