Android 使用百度LBS SDK(六)轨迹回放

来源:互联网 发布:淘宝店铺排名查询软件 编辑:程序博客网 时间:2024/05/28 15:37

前篇:

Android使用百度LBS SDK     

(内容:百度地图API基本功能)


Android使用百度LBS SDK(二)

(内容:计算轨迹起始点和终点的直线距离和行驶距离、去掉MapView的缩放空间和百度Logo)


Android使用百度LBS SDK(三)点击地图POI导航 

(内容:击Poi或者地图上任意位置开始导航)


Android使用百度LBS SDK(四) 

(内容:设置导航路线规划策略、搜索框添加一键清除按钮、避免多次进入导航实例)


Android使用百度LBS SDK(五) 

(内容:卫星图、定位模式:普通跟随罗盘、指南针位置、SD卡导入离线地图、在线更新离线地图)


------------------------------------------------------------------------------------------------------------------------------------------

前面实现了轨迹绘制功能,后面添加了轨迹回放功能。

可还原轨迹速度,显示轨迹时间进度,暂停播放轨迹,加速播放。

效果:



------ 红虚线:起始点和终点连接直线

------ 绿虚线:轨迹趋势线

—— 蓝实线:实时绘制的轨迹


  支持x1,x5,x10倍速播放轨迹。


暂停,继续,重复播放。

------------------------------------------------------------------------------------------------------------------------------------------

代码实现:

主要状态:

        /** 播放倍数 */private TextView textPlaySpeed;/** 播放状态控制图标 */private ImageView imagePlayState;/** 播放状态:暂停、播放 */private boolean isRoutePlaying = true;/** 播放时间 */private TextView textPlayTime;/** 是否播放完毕 */private boolean isRouteFinished = false;public double mRouteLatitude = 0.0;public double mRouteLongitude = 0.0;/** 轨迹文件夹路径 */private final String ROUTE_PATH = Constant.RouteTrack.PATH;/** 当前轨迹的路径 */private String filePath = "";

绘制轨迹线程:

                        nowIndex = 1;for (int i = 0; i < points.size(); i++) {if (isActivityShowing) {if (isRoutePlaying) {Message messageFollow = new Message();messageFollow.what = 1;drawRouteHandler.sendMessage(messageFollow);try {Thread.sleep(1000 / MyApplication.routePlaySpeed);} catch (InterruptedException e) {e.printStackTrace();}} else {// 暂停do {try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}} while (!isRoutePlaying);}} else {MyLog.v("[Loop]Return in case activity is onDestory.");return;}}

绘制轨迹趋势底图,起点终点虚线:

// 绘制轨迹底图PolylineOptions polylineOptionBg = new PolylineOptions();polylineOptionBg.width(10); // 折线线宽, 默认为 5, 单位:像素polylineOptionBg.dottedLine(true); // 折线是否虚线polylineOptionBg.color(0xAA009966); // 折线颜色polylineOptionBg.points(points); // 折线坐标点列表:[2,10000],且不能包含nullpolylineOptionBg.keepScale(true); // 纹理宽、高是否保持原比例渲染OverlayOptions ooPolyline = polylineOptionBg;mBaiduMap.addOverlay(ooPolyline);// 绘制起点终点直线PolylineOptions polylineOptionDirec = new PolylineOptions();polylineOptionDirec.width(10); // 折线线宽, 默认为 5, 单位:像素polylineOptionDirec.dottedLine(true); // 折线是否虚线polylineOptionDirec.color(0xAAFF0000); // 折线颜色List<LatLng> pointStartEnd = new ArrayList<LatLng>(2);pointStartEnd.add(points.get(0));pointStartEnd.add(points.get(points.size() - 1));polylineOptionDirec.points(pointStartEnd); // 折线坐标点列表:[2,10000],且不能包含nullpolylineOptionDirec.keepScale(true); // 纹理宽、高是否保持原比例渲染OverlayOptions ooPolylineDirec = polylineOptionDirec;mBaiduMap.addOverlay(ooPolylineDirec);


0 0