背景
百度地图的默认中心点是在正中心,但产品设计时常会在地图上方覆盖一层业务功能所需的元素,就要求地图的中心点往上偏移,否则就可能会被页面其他元素遮挡,需求示意图:
示例图.png
解决思路
百度提供MapStatus.Builder类提供了target和targetScreen两个方法,target的参数是一个经纬度点,targetScreen的参数则是设备屏幕上的一个点,我们就利用targetScreen来实现。
参考代码
原本移动目标坐标点到地图中心点的代码:
//latitude和longitude为需要移动到地图中心的坐标点的经纬度
LatLng latLng = new LatLng(latitude, longitude);
MapStatus mapStatus = new MapStatus.Builder().target(latLng).build();
mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(mapStatus));
先设置地图中心点偏移,再移动目标坐标点:
//300和500分别为需要设置的中心点的屏幕X和Y轴位置
//可以通过屏幕宽高后按需计算获得,也可以根据layout文件中某个View(如大头针图标)的位置而获得,按需
Point p = new Point(300, 500);
//告诉地图中心点不再是中心,而是p的位置
MapStatus mapStatus = new MapStatus.Builder().targetScreen(p).build();
mBaiduMap.setMapStatus(MapStatusUpdateFactory.newMapStatus(mapStatus));
//latitude和longitude为需要移动到地图中心的坐标点的经纬度
LatLng latLng = new LatLng(latitude, longitude);
mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newLatLng(latLng));
注意:
targetScreen方法为设置地图操作中心点在屏幕的坐标, 但只有在 OnMapLoadedCallback.onMapLoaded() 之后设置才生效,参考:
mBaiduMap.setOnMapLoadedCallback()
参考资料
百度地图官方类参考
http://lbsyun.baidu.com/cms/androidsdk/doc/6.4.0/index.html
-MapStatus类
-OnMapLoadedCallback类