2010-11-10 6 views
9

Y a-t-il un moyen de définir un niveau de zoon minimum pour mon MapView? Je ne sais pas si vous avez réalisé que la carte est vraiment moche quand le niveau de zoom est un. Vous voyez la carte du monde entier répliquée. Je voudrais éviter ce niveau de zoom, peu importe si l'utilisateur zoome à travers des gestes ou des commandes de zoom. J'ai regardé différentes alternatives, mais aucune ne semble fonctionner. Est-ce que quelqu'un a une bonne idée à ce sujet?Définir le niveau de zoom minimum pour MapView

Ger

Répondre

17

Heureusement, j'avais une superposition dans mon MapView. Sinon, je suppose que vous devrez en créer un, juste pour cette petite fonctionnalité: - /. Je me demande pourquoi il n'y a pas d'autre moyen de le faire plus facilement.

Quoi qu'il en soit, il vous suffit de remplacer votre méthode de tirage au sort comme celui-ci:

@Override 
    public void draw(Canvas canvas, MapView mapView, boolean shadow) { 
     super.draw(canvas, mapView, shadow); 
     if (mapView.getZoomLevel() < 2) 
      mapView.getController().setZoom(2); 
    } 

Ger

-4

écrire juste onCreate code suivant:

MapController myMC myMapView.getController(); 
myMC.setZoom(int value); 
+1

Merci pour la réponse rapide. Cependant, ce n'est pas une solution à mon problème. Avec ce code, vous définissez simplement le niveau de zoom initial. Mais cela n'empêche pas l'utilisateur de zoomer en arrière, et d'avoir cette vue de carte laide avec un niveau de zoom égal à 1 (deux africas, deux americas) – ggomeze

+0

si vous ne cherchez pas l'option standart seulement, réglez le limiteur manuellement :) – polyakovsky

+0

Pourquoi Limitez-vous ce que l'utilisateur peut faire? Et s'ils veulent voir le monde entier? – Falmarri

3

similaires à de ggomeze réponse en remplaçant une méthode *draw() mais il peut être préférable de passer outre dispatchDraw() dans MapView . De cette façon, vous pouvez bloquer le tirage pour le niveau de zoom où les tuiles sont vides. Notez également qu'il est bon de centrer la carte à ce stade, car si vous effectuez un zoom avant avec des gestes tactiles, le fait de régler manuellement le zoom d'un niveau peut entraîner le décalage de la carte à chaque fois (ce qui donne l'apparence MapView un peu plus douteux!).

@Override 
public void dispatchDraw(Canvas canvas) { 

    //limit zoom level 
    if(getZoomLevel() == 1){ 
     getController().setZoom(2); 
     getController().setCenter(new GeoPoint(0, 0)); 
     //dont draw as it will just be blank and then jump 
     return; 
    } 

    super.dispatchDraw(canvas); 
} 

Cela pourrait être amélioré en suivant le niveau de zoom alors que le geste a lieu aussi pour que l'utilisateur ne peut pas voir le zoom partiel au niveau de zoom le plus bas bloqué (1) tout en faisant des gestes, mais j'imagine le cas ci-dessus conviendra le plus et est beaucoup plus facile!

Questions connexes