项目需求是做一个类似于滴滴的车辆救援,界面是地图上面再覆盖一部分表单。订单状态不同,表单里的信息不同,那么表单的高度就不同。因为界面都使用到了map,所以尽管订单有不同的状态,但是我都在一个界面做,通过状态变化来控制表单的显示状态。但是有一个问题是,不同的订单状态因为表单高度不同,导致地图的定位坐标点可能不在可视区域的中心。特别是我使用了bottomsheet来实现抽屉式表单,地图和表单肯定是有部分重叠的。那么如何才能让定位点位于可见地图区域的中心呢?
1、高德地图移动中心点的方法:
AMap.setPointToCenter(centerX, centerY)
2、寻找地图可见区域的中心点
主要是寻找地图中心点的Y坐标,思路是屏幕高度-title高度-表单高度,这样即使我的mapview设置的是match_parent,也可以让定位坐标点位于我计算的屏幕中心。
计算高度时遇到的问题是,什么时候计算高度。我们知道只有当view完成绘制的时候才能测量高度,所以在OnCreate里去获取控件高度肯定是不准的。网上的方法主要是以下四个:
(1)在onWindowFocuseChanged的时候去获取。这个方法虽然能获取到宽高,但是很被动。因为这个方法只有在activity获取焦点和失去焦点的时候才会被调用。而我希望是自己能够主动去获取宽高,设置中心点
(2)post runnable方法。没有用这个因为当时不懂原理,怕不稳妥,后来看了一下原理(https://blog.csdn.net/scnuxisan225/art