首页 > 解决方案 > 导航kotlin android中的平滑地图旋转

问题描述

我有平滑地图旋转的问题。我使用 Sensor 和 onSensorChanged 来获取用户正在查看的方向。然后我把它放在数学学位上(愤怒-180:180)

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

然后将其传递给其他函数

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

if 语句避免在传感器稍微移动时晃动地图。

我的问题是我在这个 if 语句中输入了什么来平滑旋转地图。我已经尝试过这样的事情:

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
        }

标签: androidkotlingps

解决方案


推荐阅读