回答

35

創建一個實現of OnCameraChangeListener,並通過它的一個實例to setOnCameraChangeListener() of your GoogleMap。每當用戶更改縮放,中心或傾斜時,應使用onCameraChange()調用您的聽衆。您可以從您傳遞的CameraPosition對象中找到新的縮放級別。

+8

setOnCameraChangeListener現在已經過時 – Makalele

+0

@CommonsWare如果我只想檢測放大onDoubleTap谷歌地圖上什麼?? –

+0

@NirmalPrajapat:我不知道,對不起。 – CommonsWare

46

如果你正在尋找如何確定縮放級別,從以前的縮放級別改變,這裏是我建議:

定義一個實例變量來跟蹤先前的縮放級別:

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

此外,如果地圖縮放定義一個實例變量,讓你知道:

private boolean isZooming = false; 

當你設置你的GoogleMap的實例,給它一個OnCameraC hangeListener ...

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

現在,定義OnCameraChangeListener,來決定是否縮放級別已經改變:

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

現在,你可以檢查isZooming的價值要知道,如果你正在改變縮放級別。

務必將

isZooming = false; 

您完成後的任何行動依賴於知道,如果地圖被放大。

+1

也可以作爲一個完美的拖拽監聽器。正是我想要通過到地圖中心的距離過濾標記視圖。謝謝!現在不推薦使用 –

+0

。 –

18

由於以前的答案是根據OnCameraChangeListener而這就是deprecated,這個答案是根據相機setOnCameraMoveListener

在此示例中,當用戶更改縮放(使用控件或手指並縮放)時,我正在更改Map Type。如果zoom level變化超過18.0,則地圖類型更改爲MAP_TYPE_HYBRIB,如果它低於18.0,地圖類型更改爲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

不錯!比OnCameraChangeListener更清潔。有趣的想法來改變地圖類型。 –

+0

注意:對於每個縮放事件,此回調會觸發不少次 –

+0

@SomeoneSomewhere是的。當用戶放大時,縮放的每個「階段」都會觸發。放大/縮小越慢,觸發聽衆的次數就越多。放大/縮小的速度越快,觸發的次數就越少。 –

相關問題