You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Kotlin导航中基于传感器实现地图平滑旋转的问题

Android Kotlin 地图双向平滑旋转实现

问题场景

开发Android Kotlin导航功能时,需要基于传感器回调实现地图随用户朝向平滑旋转,原有实现仅支持单向旋转,无法适配实际使用需求。

原有实现逻辑

1. 传感器角度获取

通过Sensor的onSensorChanged回调获取用户朝向,转换为范围-180~180的数学角度:

degres = Math.toDegrees(mOrientation.get(0).toDouble())

2. 抖动过滤逻辑

设置±10度差值阈值过滤传感器微小抖动,避免地图异常晃动:

if (gps != null) {
            if(degres!! !in lastDegres!!-10..lastDegres!!+10 && degres!!>0 || degres!! !in lastDegres!!-10 ..lastDegres!!+10 && degres!!<0 ){
                //here
                lastDegres = degres
            }
        }

3. 单向旋转缺陷代码

原有平滑旋转逻辑仅支持向右旋转:

if (gps != null) {
            if(degres!! !in lastDegres!!-10..lastDegres!!+10 && degres!!>0 || degres!! !in lastDegres!!-10 ..lastDegres!!+10 && degres!!<0 ){
                var result = (lastDegres!!  - (degres!! )).toInt()

                    for (i in 0..result) {
                        setOrientation(((180 + lastDegres!! + i ).toFloat()))
                        update()
                    }
                lastDegres = degres
            }
        }

双向平滑旋转实现

实现双向旋转的核心是先判断距离当前角度最近的旋转方向(向左/向右),参考实现代码如下:

if (gps != null) {
            realpos = degres!! * -1
            if (realpos < 0) realpos += 360
            dif = if (realpos > lastDegres!!) { realpos - lastDegres!! } else { (lastDegres!! - realpos) }

            if (dif > 10) {
                if(realpos > lastDegres!!){
                    for (i in 1..dif.toInt()*50000) {
                        orientation = (lastDegres!!.toFloat()+i/50000)
                        update()
                    }
                }else if (lastDegres!! > realpos) {
                    for (i in 1..dif.toInt()*50000){
                        orientation = (lastDegres!!.toFloat()-i/50000)
                        update()
                    }
                }
            lastDegres = realpos
        }

内容的提问来源于stack exchange,提问作者godislikemyquestionsrets

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 05:57:02