背景

百度地图的默认中心点是在正中心,但产品设计时常会在地图上方覆盖一层业务功能所需的元素,就要求地图的中心点往上偏移,否则就可能会被页面其他元素遮挡,需求示意图:

f7ae960e8e29

示例图.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()

参考资料

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐