高德地图估计回放

1).获取轨迹数据封装成List<LatLng>类型
2).绘制轨迹,参数为获取的轨迹数据
    private void showline(List<LatLng> points) {
    //开始绘制新的轨迹
    trackPolyline = aMap.addPolyline(new PolylineOptions()
                .addAll(points)
                .setDottedLine(false) //关闭虚线
                .useGradient(true)//设置是否使用渐变色
                .width(10)//设置线段的宽度,单位像素
                .color(Color.BLUE));

    // 获取轨迹坐标点
    LatLngBounds.Builder b = LatLngBounds.builder();
    for (int i = 0; i < points.size(); i++) {
        b.include(points.get(i));
    }
    LatLngBounds bounds = b.build();
    aMap.animateCamera(CameraUpdateFactory.newLatLngBounds(bounds, 100));

    }
3).轨迹回放
    private void starttoSmoothMove() {
    // 设置滑动的Marker
    if(smoothMarker != null) {
        smoothMarker = null;
    }
    smoothMarker = new SmoothMoveMarker(aMap);
    // 设置滑动的图标 
    smoothMarker.setDescriptor(BitmapDescriptorFactory.fromBitmap(Bi tmapFactory.decodeResource(getResources(), moveCarImg)));
    //计算轨迹运行之后的距离,重新开始回放
    smoothMarker.setPoints(trackPoints);//设置平滑移动的轨迹list
    smoothMarker.setTotalDuration(60);
    smoothMarker.getMarker().setTitle(moveCarRegName);
    smoothMarker.getMarker().setSnippet("");
    // 设置移动的监听事件 返回 距终点的距离 单位 米
    smoothMarker.setMoveListener(new SmoothMoveMarker.MoveListener(){

        @Override
        public void move(double v) {
        smoothMarker.getMarker().showInfoWindow();
        LatLng position = smoothMarker.getPosition();
        aMap.animateCamera(CameraUpdateFactory.changeLatLng(position));

        }
    });
    /*smoothMarker.setMoveListener(new SmoothMoveMarker.MoveListener() {
        @Override
        public void move(final double distance) {
            mContext.runOnUiThread(new Runnable() {

                @Override
                public void run() {
                    if ((int) distance > 1500000) {
                        smoothMarker.setTotalDuration(250);//设置平滑移动的总时间
                    }
                    if ((int) distance < 1500000 && (int) distance > 100000) {
                        smoothMarker.setTotalDuration(200);//设置平滑移动的总时间
                    }
                    if ((int) distance < 100000 && (int) distance > 50000) {
                        smoothMarker.setTotalDuration(125);//设置平滑移动的总时间
                    }
                    if ((int) distance < 50000 && (int) distance > 10000) {
                        smoothMarker.setTotalDuration(75);//设置平滑移动的总时间
                    }
                    if ((int) distance < 10000) {
                        smoothMarker.setTotalDuration(25);//设置平滑移动的总时间
                    }
                }
            });
        }
    });*/
    smoothMarker.getMarker().setVisible(true);
    }

4).根据地图缩放等级设置轨迹回放时间------控制回放速度
    aMap.setOnCameraChangeListener(new AMap.OnCameraChangeListener() {
        @Override
        public void onCameraChange(CameraPosition cameraPosition) {

        }

        @Override
        public void onCameraChangeFinish(CameraPosition cameraPosition) {
            if(stopCrushLocation) {
                float zoom = cameraPosition.zoom;
                //地图比例缩放到最小20(10m), 18(25m), 16(100m), 15(200m), 14(500m)
                if(zoom > 12) {
                    Log.e("zoom", zoom + "> 12, 1000");
                    smoothMarker.setTotalDuration(1000);
                }else if(zoom > 10) {
                    Log.e("zoom", zoom + "> 10, 500");
                    smoothMarker.setTotalDuration(500);
                }else if(zoom > 8) {
                    Log.e("zoom", zoom + "> 8, 80");
                    smoothMarker.setTotalDuration(80);
                }
            }
        }
    });
 

5)按钮点击事件

case R.id.iv_track_play://开始按钮
    isStop = false;
    iv_track_stop.setImageDrawable(getResources().getDrawable(R.mipmap.start));
    //清除之前的轨迹---待实现
    if (rebackPolyline != null) {
        rebackPolyline.remove();
        rebackPolyline = null;
    }
    if (trackPoints.size() < 1) {
        ToastUtils.showToast("没有轨迹");
    } else {
        ToastUtils.showToast("轨迹开始回放");
        smoothMarker.removeMarker();
        starttoSmoothMove();
        smoothMarker.startSmoothMove();
        aMap.setMaxZoomLevel(13);
    }
    break;
case R.id.iv_track_stop://继续或暂停按钮
    isStop = !isStop;
    if (!isStop) {
        if (trackPoints.size() < 1) {
            ToastUtils.showToast("没有轨迹");
        } else {
            iv_track_stop.setImageDrawable(getResources().getDrawable(R.mipmap.start));
            smoothMarker.startSmoothMove();
            stopCrushLocation = true;
            aMap.setMaxZoomLevel(13);
        }
    } else {
        iv_track_stop.setImageDrawable(getResources().getDrawable(R.mipmap.stop));
        smoothMarker.stopMove();
    }
    break;
case R.id.iv_track_over://结束按钮
    //隐藏开始暂停按钮键
    ll_track.setVisibility(View.GONE);
    //清除之前的小图标和轨迹
    if(smoothMarker != null) {
        smoothMarker.destroy();
    }
    aMap.clear();
    //轨迹回放结束取消设置的地图最大缩放级别
    aMap.setMaxZoomLevel(20);
    aMap.moveCamera(CameraUpdateFactory.zoomTo(3));
    stopCrushLocation = false;
    break;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值