2013-10-07 127 views
1

它是關於android和谷歌地圖v2。我想用限制設置最大縮放級別。 這裏是我使用的方法:我發現這個鏈接,給了我一個可能的解決方法 Setting max zoom level in google maps android api v2android Gmaps v2:界限和最大縮放級別

這裏

gMap.animateCamera(CameraUpdateFactory.newLatLngBounds(bounds, width, height, padding)); 

是workaraound發現

gMap.setOnCameraChangeListener(new OnCameraChangeListener() { 
    @Override 
    public void onCameraChange(CameraPosition position) { 
     if (position.zoom > DEFAULT_ZOOM) 
      gMap.animateCamera(CameraUpdateFactory.zoomTo(DEFAULT_ZOOM)); 
    } 
}); 

但是這種解決方案放大,直到第一個animateCamera定義的縮放級別,然後縮小,直到DEFAULT_ZOOM(DEFAULT_ZOOM < position.zoom)。在這種情況下,有兩個animateCamera

如何避免這種情況?並只有一個animateCamera

THX提前

回答

2

好了,現在,我唯一能做的,這裏涉及https://stackoverflow.com/a/19343818/1646479

下面是解決方法:

private LatLngBounds adjustBoundsForMaxZoomLevel(LatLngBounds bounds) { 
    LatLng sw = bounds.southwest; 
    LatLng ne = bounds.northeast; 
    double deltaLat = Math.abs(sw.latitude - ne.latitude); 
    double deltaLon = Math.abs(sw.longitude - ne.longitude); 

    final double zoomN = 0.005; // minimum zoom coefficient 
    if (deltaLat < zoomN) { 
    sw = new LatLng(sw.latitude - (zoomN - deltaLat/2), sw.longitude); 
    ne = new LatLng(ne.latitude + (zoomN - deltaLat/2), ne.longitude); 
    bounds = new LatLngBounds(sw, ne); 
    } 
    else if (deltaLon < zoomN) { 
    sw = new LatLng(sw.latitude, sw.longitude - (zoomN - deltaLon/2)); 
    ne = new LatLng(ne.latitude, ne.longitude + (zoomN - deltaLon/2)); 
    bounds = new LatLngBounds(sw, ne); 
    } 

    return bounds; 
} 

,但我在尋找將android縮放級別(本例中爲16)轉換爲zoomN的解決方案。

相關問題