安卓-高德api拖拽点/移动点无效的方案

起因:对自己的app加一个功能,明明设置了draggable但是无效

首先,高德api是通过如下设置移动事件的处理的。
 

aMap.setOnMarkerDragListener(new AMap.OnMarkerDragListener() {

            @Override
            public void onMarkerDragStart(Marker marker) {

            }

            @Override
            public void onMarkerDrag(Marker marker) {

            }

            @Override
            public void onMarkerDragEnd(Marker marker) {

            }
        });

但是,在设置listener之前要先对点设置draggable,有两种方法:
①没有maker对象:

markerOptions = new MarkerOptions()
                    .draggable(draggable)
                    .position(currentLatLng);
            marker = getaMap().addMarker(markerOptions);

②有maker对象

marker.setDraggable(this.draggable);

于是乎,我在调用自己的一个函数时踩了坑:
 

    protected Marker changeDefaultMarker(LatLng currentLatLng, boolean draggable) {
        //更新定位点在地图的显示
        if (marker != null) {
            marker.setPosition(currentLatLng);
        } else {
            markerOptions = new MarkerOptions()
                    .draggable(draggable)
                    .position(currentLatLng);
            marker = getaMap().addMarker(markerOptions);
            if (marker != null) {
                marker.showInfoWindow();
            }
        }
        if (marker==null){
            throw  new RuntimeException("marker is not initialized successfully");
        }
        return marker;
    }

由于我的应用场景要频繁对maker的location做改变,所以我最初只在首次初始化maker对象时设置draggable。然而,我在初始化maker对象之后再调用,由于maker对象存在,就不会对draggable参数进行更新。

最后在第一个判断语句加上,解决

marker.setDraggable(this.draggable);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值