百度地图 绘制路线图有多个方案时 实现点击切换路线

在这里就不介绍获得3种方式的路线了 详情参照http://developer.baidu.com/map/index.php?title=androidsdk/guide/retrieval#.E7.BA.BF.E8.B7.AF.E8.A7.84.E5.88.92
如图所示 当有多种路线方案时就选择最佳的3条 默认最优线路处于高亮状态,当点击其他路线时,点击的路线处于高亮状态
[img]http://dl2.iteye.com/upload/attachment/0114/4375/90edb44f-f143-3908-9a7d-be2f37b70167.jpg[/img]

[img]http://dl2.iteye.com/upload/attachment/0114/4377/938be020-72c6-3861-9bb3-92f62f5914e1.jpg[/img]

在这示范乘车路线
一 首先在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;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值