如图所示 当有多种路线方案时就选择最佳的3条 默认最优线路处于高亮状态,当点击其他路线时,点击的路线处于高亮状态
在这示范乘车路线
一 首先在OnGetRoutePlanResultListener里绘制所有路线方案
/** * 驾车路线结果回调 查询的结果可能包括多条驾车路线方案 */ @Override public void onGetDrivingRouteResult( DrivingRouteResult drivingRouteResult) { mBaidumap.clear(); if (drivingRouteResult == null || drivingRouteResult.error != SearchResult.ERRORNO.NO_ERROR) { Toast.makeText(MainActivity.this, "抱歉,未找到结果", Toast.LENGTH_SHORT).show(); } if (drivingRouteResult.error == SearchResult.ERRORNO.AMBIGUOUS_ROURE_ADDR) { // 起终点或途经点地址有岐义,通过以下接口获取建议查询信息 // drivingRouteResult.getSuggestAddrInfo() return; } if (drivingRouteResult.error == SearchResult.ERRORNO.NO_ERROR) { int totalLine = drivingRouteResult.getRouteLines().size(); drivingRoutes.clear(); for(int i=totalLine-1;i>=0;i--){ DrivingRouteOverlay drivingRouteOverlay = new DrivingRouteOverlay( mBaidumap); if(i!=0) { drivingRouteOverlay.setLineColor(Color.parseColor("#bdbdbd")); }else{ drivingRouteOverlay.setLineColor(Color.BLUE); } drivingRouteOverlay.setData(drivingRouteResult.getRouteLines() .get(i));// 设置一条驾车路线方案 drivingRouteOverlay.addToMap(); drivingRouteOverlay.zoomToSpan(); mBaidumap.setOnPolylineClickListener(drivingRouteOverlay); //设置点击路标监听器 mBaidumap.setOnMarkerClickListener(drivingRouteOverlay); } Toast.makeText(MainActivity.this, "共查询出" + totalLine + "条符合条件的线路", Toast.LENGTH_SHORT).show(); }
之所以从后往前遍历是因为我认为百度地图提供的方案路线数组中第一个是最优方案,
所以作为最后一个添加到地图上,才能显示在最上层,将其余路线覆盖
二 修改DrivingRouteOverlay源代码
DrivingRouteOverlay继承了OverlayManager,而OverlayManager又继承了OnPolylineClickListener,所以DrivingRouteOverlay本身也是一个PolylineClickListener(polyline覆盖物点击事件监听接口)的监听器,所以可以重写onPolylineClick的方法来实现点击一个路线后切换
@Override public boolean onPolylineClick(Polyline polyline) { boolean flag = false; for (Overlay mPolyline : mOverlayList) { if(mPolyline instanceof Polyline){ //改变路线颜色为未选中状态 ((Polyline) mPolyline).setColor(Color.parseColor("#bdbdbd")); //改变路线未被选中 ((Polyline) mPolyline).setFocus(false); //设置路线的层级 注意要比选中路线的层级低 ((Polyline) mPolyline).setZIndex(10); if(mPolyline.equals(polyline)){ ((Polyline) mPolyline).setFocus(true); //设置选中的路线颜色为高亮状态 polyline.setColor(Color.BLUE); ///设置选中的路线的层级 一定要比上面的高 polyline.setZIndex(15); } } } //setFocus(flag); return true; }