为什么osmdroid当前位置标记会从人形图标切换为箭头图标?
osmdroid默认当前位置标记的切换逻辑
osmdroid自带的默认位置标记(来自MyLocationNewOverlay组件)的显示样式,由两个核心参数决定:
- 位置数据返回的方位角(bearing)有效性及精度:方位角即设备当前朝向,数据来自设备磁力计、陀螺仪传感器组合,或是移动状态下GPS计算出的运动方向。当方位角的精度达到系统预设阈值、数据有效时,会自动显示箭头样式的标记,箭头指向对应当前方位角方向。
- 设备的运动状态:设备处于静止状态时,系统大概率不会返回有效方位角,此时会默认显示人形图标。
跨设备显示差异的原因
- 安卓模拟器的模拟位置源默认会携带预设的有效方位角数据,所以大部分场景下直接显示箭头;如果模拟器刚启动时位置模块未完成初始化、模拟方位角还没加载完成,就会先显示人形,等数据就绪后自动切换为箭头,和你观察到的现象完全吻合。
- 实体手机如果处于静止状态、应用未获取罗盘权限、或是周围磁场干扰导致磁力计精度不足,无法输出有效方位角时,就会持续显示人形图标。你可以尝试持实体机移动一段距离,只要GPS可以计算出运动方向,或是罗盘精度恢复,也会自动切换为箭头样式。
关于自动切换风险的说明
如果不需要系统自动切换标记样式,你可以手动固定图标,完全规避状态触发的变化:只需调用MyLocationNewOverlay的setDirectionArrow()和setPersonIcon()方法,将两个参数设置为同一个你期望的drawable资源即可,后续不管方位角、运动状态如何变化,标记都会保持你指定的样式。
内容的提问来源于stack exchange,提问作者JonR85
相关产品推荐
相关产品推荐

