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?

36
demandé sur joao2fast4u 2013-03-29 13:44:24

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));
}
26
répondu Tisys 2013-06-18 17:39:11

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.

22
répondu Dmitry Serov 2016-09-01 17:15:48

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;
}
12
répondu kasimir 2013-10-13 09:47:07
https://developers.google.com/maps/documentation/android-api/views

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);
10
répondu ChrisUser2627250 2016-10-15 16:41:58

identique à la solution Arvis mais en utilisant Location