risposta

35

Creare un'implementazione of OnCameraChangeListener e passarne un'istanza to setOnCameraChangeListener() of your GoogleMap. Il tuo ascoltatore dovrebbe essere chiamato con onCameraChange() ogni volta che l'utente cambia lo zoom, il centro o l'inclinazione. Scopri il nuovo livello di zoom dall'oggetto CameraPosition che sei passato.

+8

setOnCameraChangeListener è ormai deprecato – Makalele

+0

@CommonsWare cosa se voglio rilevare solo lo zoom onDoubleTap sulla mappa di google ?? –

+0

@NirmalPrajapat: non ne ho idea, mi dispiace. – CommonsWare

46

Se siete alla ricerca di come determinare se il livello di zoom è cambiato dal livello di zoom precedente, ecco cosa mi suggeriscono:

definire una variabile di istanza per tenere traccia del livello di zoom precedente:

//Initialize to a non-valid zoom value 
private float previousZoomLevel = -1.0f; 

Inoltre, definire una variabile di istanza per farvi sapere se la mappa è lo zoom:

private boolean isZooming = false; 

Quando si configura esempio il vostro GoogleMap, dargli un OnCameraC hangeListener ...

//mMap is an instance of GoogleMap 
mMap.setOnCameraChangeListener(getCameraChangeListener()); 

Ora, definire l'OnCameraChangeListener che determinerà se il livello di zoom è cambiato:

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; 
     } 
    }; 
} 

Ora, è possibile controllare il valore di isZooming per sapere se si sta modificando i livelli di zoom .

Assicurarsi di impostare

isZooming = false; 

dopo aver completato qualsiasi azione si basa sul fatto se la mappa è lo zoom.

+1

Funziona perfettamente anche come ascoltatore di trascinamento. Esattamente quello che stavo cercando per filtrare i marcatori vista dalla distanza al centro della mappa. Grazie! –

+0

deprecato ora. –

18

Poiché le risposte precedenti si basano su OnCameraChangeListener e cioè deprecated, questa risposta è basata sulla telecamera setOnCameraMoveListener.

In questo esempio, sto cambiando il mio Map Type quando l'utente cambia lo zoom (utilizzando i controlli o le dita e lo zoom). Se la modifica è zoom level superiore a 18.0, il tipo di mappa cambia in MAP_TYPE_HYBRIB e se scende sotto 18.0, il tipo di mappa cambia 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); 
     } 
    } 
}); 
+0

Bello! Molto più pulito di OnCameraChangeListener. Idea interessante per cambiare il tipo di mappa. –

+0

nota: questa richiamata viene attivata più volte per ogni evento di zoom –

+0

@SomeoneSomewhere Sì, lo è. Mentre l'utente sta eseguendo lo zoom, ogni "fase" dello zoom avrà un trigger. Più lento è lo zoom in/out, più volte si attiverà l'ascoltatore. Più veloce è lo zoom avanti/indietro, meno volte si innesca. –

Problemi correlati