web-dev-qa-db-fra.com

Android MAPViet -Setage Zoom automatiquement jusqu'à ce que tous les itemizeoverlay sont visibles

codage rigide La Setzoom () dans ONCREATE () se sent très antiquité et j'aimerais améliorer l'expérience utilisateur en présentant initialement le MapView Définir le zoom jusqu'à ce que tous les géopoints/superchauffies soient visibles sur la carte.

Comment cela peut-il être fait par magie automatique?

52

Un peu comme ça

int minLat = Integer.MAX_VALUE;
int maxLat = Integer.MIN_VALUE;
int minLon = Integer.MAX_VALUE;
int maxLon = Integer.MIN_VALUE;

for (GeoPoint item : items) 
{ 

      int lat = item.getLatitudeE6();
      int lon = item.getLongitudeE6();

      maxLat = Math.max(lat, maxLat);
      minLat = Math.min(lat, minLat);
      maxLon = Math.max(lon, maxLon);
      minLon = Math.min(lon, minLon);
 }

mapController.zoomToSpan(Math.abs(maxLat - minLat), Math.abs(maxLon - minLon));
mapController.animateTo(new GeoPoint( (maxLat + minLat)/2, 
(maxLon + minLon)/2 )); 

edit: Ryan a donné une belle suggestion: mettre un rembourrage afin que certains points ne se trouvent pas sur les bords (merci Ryan!)

double fitFactor = 1.5;
mapController.zoomToSpan((int) (Math.abs(maxLat - minLat) * fitFactor), (int)(Math.abs(maxLon - minLon) * fitFactor));
128
Reno

Il n'y a pas de moyen magique d'y parvenir. Je suggère de parcourir tous vos superpositions pour obtenir le centre et la couverture de tous ces articles. Puis réglez le centre et de la plage en conséquence pour la carte

2
pankajagarwal