Je suis en train de développer une application Android qui est censée utiliser Google Maps v2. Maintenant, je ne peux pas savoir quand le niveau de zoom de la carte a changé. Quelqu'un peut-il m'aider? Merci d'avance.
Créez une implémentation de OnCameraChangeListener
, et passez une instance de celle-ci à setOnCameraChangeListener()
de votre GoogleMap
. Votre auditeur doit être appelé avec onCameraChange()
chaque fois que l'utilisateur modifie le zoom, le centre ou l'inclinaison. Vous découvrez le nouveau niveau de zoom à partir de l'objet CameraPosition
que vous avez passé.
Si vous cherchez à déterminer si le niveau de zoom a changé par rapport au niveau de zoom précédent, voici ce que je suggère:
Définissez une variable d'instance pour garder une trace du niveau de zoom précédent:
//Initialize to a non-valid zoom value
private float previousZoomLevel = -1.0f;
Définissez également une variable d'instance pour vous permettre de savoir si la carte effectue un zoom:
private boolean isZooming = false;
Lorsque vous configurez votre instance GoogleMap, attribuez-lui un OnCameraChangeListener ...
//mMap is an instance of GoogleMap
mMap.setOnCameraChangeListener(getCameraChangeListener());
Maintenant, définissez OnCameraChangeListener qui déterminera si le niveau de zoom a changé:
public OnCameraChangeListener getCameraChangeListener()
{
return new OnCameraChangeListener()
{
@Override
public void onCameraChange(CameraPosition position)
{
Log.d("Zoom", "Zoom: " + position.zoom);
if(previousZoomLevel != position.zoom)
{
isZooming = true;
}
previousZoomLevel = position.zoom;
}
};
}
Maintenant, vous pouvez vérifier la valeur de isZooming pour savoir si vous modifiez les niveaux de zoom.
Assurez-vous de définir
isZooming = false;
une fois que vous avez terminé l'action, vous devez savoir si la carte effectue un zoom.
Comme les réponses précédentes sont basées sur OnCameraChangeListener
et c'est-à-dire obsolète , cette réponse est basée sur la caméra setOnCameraMoveListener
.
Dans cet exemple, je modifie mon Type de carte lorsque l'utilisateur modifie le zoom (à l'aide des commandes ou des doigts et du zoom). Si niveau de zoom passe au-dessus de 18,0, le type de carte passe à MAP_TYPE_HYBRIB
et s'il descend en dessous de 18,0, le type de carte passe à MAP_TYPE_NORMAL
.
googleMap.setOnCameraMoveListener(new GoogleMap.OnCameraMoveListener() {
@Override
public void onCameraMove() {
CameraPosition cameraPosition = googleMap.getCameraPosition();
if(cameraPosition.zoom > 18.0) {
googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
} else {
googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
}
}
});