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;