在Android 2D地图SDK V2.2.0中,存在一个bug ,当getCameraPositon().zoom得到的值都是3.0,如果在应用中不得不用这一版本的2D地图,又必须取得这个值时(如果非必须不推荐哈),这里有一个不是很传统的方式去获取,通过在地图上添加一个TileOverlay,这个Overlay呢,不加载任何新的图层或者数据,仅仅是为了取得最新的level级别:
代码如下:
mAmap = mMapView.getMap();
// tileoverlay,只用于取level不加任何数据
TileProvider tileprovider = new UrlTileProvider(256, 256) {
@Override
public URL getTileUrl(int x, int y, int level) {
// 拿到当前的级别
if (mLevel != level) {
mLevel = level;
// 这里是子线程,不能直接操作ui,
// ps:mLevel的获取不要通过OncameraChangeListener进行处理
// 因为线程的先后关系,在快速缩放时,取到的mLevel有可能不是最新的
handler.sendEmptyMessage(0);
}
// 这里不加载新的图层所以为null
return null;
}
};
TileOverlayOptions tileOverlayOptions = new TileOverlayOptions();
tileOverlayOptions.tileProvider(tileprovider);
// 将tileovelay加到地图
mAmap.addTileOverlay(tileOverlayOptions);
效果如下: