起因:对自己的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);