想要在导航中添加途径点,然后再手动与调用方法删除途经点。
看高德导航SDK中,找到了添加途径点的方法,但没有点击途经点的回调。
点击途径点没有反应,以上的问题该怎么去解决?
高德导航SDK中,添加途径点可以使用:
java
AMapNavi.getInstance().addWayPoint(latLonPoint);
但是删除途经点并没有提供直接的删除方法,需要自己监听途经点Marker的点击事件,在点击时移除该途经点:
java
// 监听所有marker点击事件
AMapNavi.getInstance().addAMapNaviListener(new AMapNaviListener() {
@Override
public void onWayPointClick(int wayID) {
// 移除该途经点
AMapNavi.getInstance().removeWayPoint(wayID);
}
});
那么在卡片式导航界面,可以添加自定义Marker用于表示途经点,并为其添加点击事件,在点击事件中调用 AMapNavi.getInstance().removeWayPoint(wayID); 移除该途经点。
具体代码如下:
java
// 添加Marker用于表示途经点
LatLonPoint latLonPoint = new LatLonPoint(39.906901, 116.437227);
AMapNavi.getInstance().addWayPoint(latLonPoint);
int wayPointId = latLonPoint.getWayPointId();
Marker wayPointMarker = aMap.addMarker(new MarkerOptions()
.position(latLonPoint)
.icon(BitmapDescriptorFactory.fromResource(R.mipmap.icon_way_point))
.draggable(false));
// 监听Marker点击事件
wayPointMarker.setOnMarkerClickListener(new AMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
// 移除途经点
AMapNavi.getInstance().removeWayPoint(wayPointId);
return false;
}
});
这样可以实现在卡片式导航界面中点击自定义的途经点Marker后,移除该途经点。
当然是采用组件化开发啦,就是把不同签名的sdk,作为一个model引入项目,就可以啦。
添加起点、终点和途径点,可以使用高德地图SDK提供的AMapNaviPath类来实现。具体可参考以下代码:
//创建起点和终点的Latlng对象
LatLng startLatLng = new LatLng(XX, XX);
LatLng endLatLng = new LatLng(XX, XX);
//创建途径点的列表
List<NaviLatLng> wayPoints = new ArrayList<>();
wayPoints.add(new NaviLatLng(XX, XX));
wayPoints.add(new NaviLatLng(XX, XX));
wayPoints.add(new NaviLatLng(XX, XX));
//构造AMapNaviPath对象
AMapNaviPath naviPath = new AMapNaviPath(startLatLng, endLatLng, wayPoints, null);
//获取途径点的列表
List<NaviLatLng> wayPointList = naviPath.getCoordList();
在地图上添加起点和终点时,可以使用高德地图SDK提供的AMapNavi起点终点绘制功能。具体可参考以下代码:
//创建起点和终点的Latlng对象
LatLng startLatLng = new LatLng(XX, XX);
LatLng endLatLng = new LatLng(XX, XX);
//绘制起点
MarkerOptions startMarkerOption = new MarkerOptions()
.icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.start)))
.position(startLatLng)
.anchor(0.5f, 0.5f);
mAMap.addMarker(startMarkerOption);
//绘制终点
MarkerOptions endMarkerOption = new MarkerOptions()
.icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.end)))
.position(endLatLng)
.anchor(0.5f, 0.5f);
mAMap.addMarker(endMarkerOption);
其中,start和end分别为起点和终点的图标资源文件。
如果需要手动删除途径点,可以使用高德地图SDK提供的AMapNavi实例的removeWayPoint方法来实现。具体可参考以下代码:
//创建AMapNavi实例
AMapNavi mAMapNavi = AMapNavi.getInstance(getApplicationContext());
//添加途径点信息
NaviLatLng wayPoint = new NaviLatLng(XX, XX);
mAMapNavi.addWayPoint(wayPoint);
//移除途径点信息
mAMapNavi.removeWayPoint(wayPoint);