美文网首页
高德地图——点击定位旋转至蓝点方向

高德地图——点击定位旋转至蓝点方向

作者: 禄眠 | 来源:发表于2020-04-06 19:47 被阅读0次

    介绍

    可能标题不能够表达清楚,我大概说一下,我要实现的功能就是当用户旋转地图后再次点击定位,地图旋转至定位蓝点方向,用过高德地图的都知道他的定位按钮有两种模式,一种是重置方向,一种是朝向小蓝点方向。这里GIF演示我就不放了,直接上代码把

    使用

    因为高德地图API没有提供相应的方法,所以我就去百度搜了下,还真有人搞定了,利用反射实现的

    Android 高德地图 获取定位蓝点旋转角度 获取Marker对象

    代码我只放关键的部分就行了,不然代码太多了

    // 定义一个变量,代表采用那种方式
    private var locationMode = 0
    
    ... ...
    
    // 在定位按钮的方法中加入判断
    btnLocation.setOnClickListener {
        val cameraPosition = aMap!!.cameraPosition
        if (locationMode == 0) {
            //启动定位
            startLocation()
            // 重置地图方向
            aMap!!.animateCamera(
                CameraUpdateFactory
                    .newCameraPosition(
                        CameraPosition(
                            cameraPosition.target,
                            cameraPosition.zoom,
                            cameraPosition.tilt,
                            0f
                        )
                    )
            )
            locationMode = 1
        } else {
            val a = ReflectUtil.getSpecifiedFieldObject(aMap, "a")
            val ac = ReflectUtil.getSpecifiedFieldObject(a, "ac")
            val f = ReflectUtil.getSpecifiedFieldObject(ac, "f")
            //小蓝点对象
            val marker = f as? Marker
            //小蓝点的旋转角度
            val rotation = (marker?.rotateAngle ?: 0f)
            // 旋转地图至小蓝点方向
            aMap!!.animateCamera(
                CameraUpdateFactory
                    .newCameraPosition(
                        CameraPosition(
                            cameraPosition.target,
                            cameraPosition.zoom,
                            cameraPosition.tilt,
                            -rotation
                        )
                    )
            )
            locationMode = 0
    }
    
    public class ReflectUtil {
    
        /**
         * 反射获取指定字段的值(是一个对象)
         */
        public static Object getSpecifiedFieldObject(Object obj, String fieldName) {
            if (obj == null) return null;
            Class<?> clazz = obj.getClass();
            Object object = null;
            try {
                Field field = clazz.getDeclaredField(fieldName);
                field.setAccessible(true);
                object = field.get(obj);
    
            } catch (Exception e) {
                e.printStackTrace();
            }
            return object;
        }
    }
    

    Over

    相关文章

      网友评论

          本文标题:高德地图——点击定位旋转至蓝点方向

          本文链接:https://www.haomeiwen.com/subject/icciphtx.html