Trả lời

35

Tạo triển khai of OnCameraChangeListener và chuyển một phiên bản của nó to setOnCameraChangeListener() of your GoogleMap. Người nghe của bạn nên được gọi với onCameraChange() bất cứ khi nào người dùng thay đổi thu phóng, trung tâm hoặc nghiêng. Bạn tìm ra mức thu phóng mới từ đối tượng CameraPosition mà bạn được chuyển.

+8

setOnCameraChangeListener now deprecated – Makalele

+0

@CommonsWare what if I want to detect only zoom onDoubleTap on google map ?? –

+0

@NirmalPrajapat: Tôi không biết, xin lỗi. – CommonsWare

46

Nếu bạn đang tìm kiếm cách để xác định xem mức độ phóng đã thay đổi từ mức độ phóng trước, đây là những gì tôi muốn đề nghị:

Xác định một biến Ví dụ để theo dõi mức độ phóng theo thời gian:

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

Ngoài ra, xác định một biến Ví dụ để cho bạn biết nếu bản đồ được phóng to:

private boolean isZooming = false; 

Khi bạn thiết lập googlemap của bạn ví dụ, cung cấp cho nó một OnCameraC hangeListener ...

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

Bây giờ, xác định OnCameraChangeListener mà sẽ xác định xem mức độ phóng đã thay đổi:

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

Bây giờ, bạn có thể kiểm tra giá trị của isZooming biết nếu bạn đang thay đổi mức thu phóng .

Hãy chắc chắn để thiết lập

isZooming = false; 

sau khi bạn đã hoàn thành bất kỳ hành động dựa vào việc giả nếu bản đồ được phóng to.

+1

Cũng hoạt động hoàn hảo như một người nghe kéo. Chính xác những gì tôi đang tìm kiếm để lọc đánh dấu xem theo khoảng cách đến trung tâm bản đồ. Cảm ơn! –

+0

không còn được dùng nữa. –

18

Vì câu trả lời trước được dựa trên OnCameraChangeListener và đó là deprecated, câu trả lời này được dựa trên máy ảnh setOnCameraMoveListener.

Trong ví dụ này, tôi đang thay đổi Map Type khi người dùng thay đổi thu phóng (sử dụng điều khiển hoặc ngón tay và thu phóng). Nếu zoom level thay đổi trên 18.0, thay đổi loại bản đồ thành MAP_TYPE_HYBRIB và nếu thay đổi dưới 18.0, thay đổi loại bản đồ thành 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

Đẹp! Sạch hơn nhiều so với OnCameraChangeListener. Ý tưởng thú vị để thay đổi loại bản đồ. –

+0

lưu ý: gọi lại này được kích hoạt khá một vài lần cho mỗi sự kiện thu phóng –

+0

@SomeoneSomewhere Có, đúng vậy. Trong khi người dùng đang phóng to, mỗi "giai đoạn" của thu phóng sẽ có trình kích hoạt. Bạn phóng to/thu nhỏ càng chậm, thời gian sẽ càng kích hoạt trình nghe. Bạn phóng to/thu nhỏ nhanh hơn, ít lần nó sẽ kích hoạt. –

Các vấn đề liên quan