动态设置高德地图中心点(坐标点),始终位于屏幕中心

项目需求是实现类似滴滴车辆救援的界面,地图上覆盖表单,表单高度随订单状态变化。问题在于地图的定位坐标点因表单高度不同而可能不在可视区域中心。解决方案包括在地图可见区域中心点找到Y坐标,并在View完成绘制后计算高度。尝试了onWindowFocusChanged、post Runnable、view.measure和ViewTreeObserver,最终选择在布局完成时使用ViewTreeObserver设置地图中心点,确保定位点始终居中。
摘要由CSDN通过智能技术生成

项目需求是做一个类似于滴滴的车辆救援,界面是地图上面再覆盖一部分表单。订单状态不同,表单里的信息不同,那么表单的高度就不同。因为界面都使用到了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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值