Ich entwickle eine Android-App, die Google Maps v2 verwenden soll. Jetzt bin ich fest auf der Suche, wenn Zoom-Level der Karte geändert hat. Kann mir jemand helfen? Vielen Dank im Voraus.Zoom-Level-Listener in Google Maps v2 in Android
Antwort
Erstellen Sie eine Implementierung of OnCameraChangeListener
, und übergeben Sie eine Instanz davon to setOnCameraChangeListener()
of your GoogleMap
. Ihr Hörer sollte mit onCameraChange()
immer dann aufgerufen werden, wenn der Benutzer den Zoom, die Mitte oder die Neigung ändert. Sie finden die neue Zoomstufe aus dem Objekt CameraPosition
, das Sie übergeben haben.
Wenn Sie suchen, wie wenn die Zoomstufe bestimmen, von der vorherige Zoomstufe geändert, hier ist was ich vorschlagen würde:
eine Instanzvariable definieren Spur des vorherigen Zoomstufe zu halten:
//Initialize to a non-valid zoom value
private float previousZoomLevel = -1.0f;
auch definieren eine Instanzvariable, damit Sie wissen, ob die Karte zoomen:
private boolean isZooming = false;
wenn Sie Setup Ihre GoogleMap Instanz, geben Sie ihm eine OnCameraC hangeListener ...
//mMap is an instance of GoogleMap
mMap.setOnCameraChangeListener(getCameraChangeListener());
Nun definiert die OnCameraChangeListener, die bestimmen, ob die Zoomstufe geändert hat:
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;
}
};
}
Nun können Sie den Wert von isZooming überprüfen wissen, ob Sie Zoomstufen ändern . Wenn die Karte abgeschlossen haben zoomt
Stellen Sie sicher,
isZooming = false;
ein, nachdem Sie jede Maßnahme zu wissen, beruht.
Auch funktioniert perfekt als Drag-Listener. Genau das, was ich gesucht habe, um Marker durch die Entfernung zur Kartenmitte zu filtern. Vielen Dank! –
jetzt veraltet. –
Da vorherige Antworten auf OnCameraChangeListener
basieren und das ist deprecated, basiert diese Antwort auf Kamera setOnCameraMoveListener
.
In diesem Beispiel ändere ich meine Map Type, wenn Benutzer den Zoom ändert (mithilfe von Steuerelementen oder Fingern und Zoom). Wenn zoom level sich über 18.0 ändert, ändert sich der Kartentyp in MAP_TYPE_HYBRIB
und wenn er unter 18,0 sinkt, ändert sich der Kartentyp in 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);
}
}
});
Schön! Viel sauberer als OnCameraChangeListener. Interessante Idee, um den Kartentyp zu ändern. –
Hinweis: Dieser Rückruf wird für jedes Zoom-Ereignis einige Male ausgelöst. –
@SomeoneSomewhere Ja, das ist es. Während der Benutzer zoomt, hat jede "Phase" des Zooms einen Auslöser. Je langsamer Sie ein-/auszoomen, desto öfter wird der Listener ausgelöst. Je schneller Sie vergrößern/verkleinern, desto seltener wird es ausgelöst. –
setOnCameraChangeListener ist jetzt – Makalele
@CommonsWare veraltet was, wenn ich nur vergrößern onDoubleTap auf Google Karte erkannt werden soll ?? –
@NirmalPrajapat: Ich habe keine Ahnung, tut mir leid. – CommonsWare