Android|Android--高德地图通过经纬度简单的实现轨迹回放

效果图:
Android|Android--高德地图通过经纬度简单的实现轨迹回放
文章图片

1、首先去高德地图官网去申请key,然后下载相关jar包。

/** * Created by Administrator on 2019/5/31 * * desc:轨迹回放 */ public class TraceReloadActivity extends FragmentActivity { private AMap aMap; private Marker marker = null; // 当前轨迹点图案 public Handler timer = new Handler(); // 定时器 public Runnable runnable = null; // 存放所有坐标的数组 private ArrayList latlngList = new ArrayList(); private ArrayList latlngList_path = new ArrayList(); // private ArrayList latlngList_path1 = new ArrayList(); private OptionsPickerView mworkPickerView; private TimePickerView mstartPickerView,mendPickerView; List names; @BindView(R.id.process_bar) SeekBar processbar; @BindView(R.id.btn_replay) Button replayButton; private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { if (msg.what == 1) { int curpro = processbar.getProgress(); if (curpro != processbar.getMax()) { processbar.setProgress(curpro + 1); timer.postDelayed(runnable, 500); // 延迟0.5秒后继续执行 } else { replayButton.setText(" 回放 "); // 已执行到最后一个坐标 停止任务 } } } }; private static final LatLng marker1 = new LatLng(34.19756,108.86557); private static final LatLng marker2 = new LatLng(34.197666,108.865034); private static final LatLng marker3 = new LatLng(34.195987,108.866503); private static final LatLng marker4 = new LatLng(34.19559,108.8643); private static final LatLng marker5 = new LatLng(34.1966500000,108.8645600000); private static final LatLng marker6 = new LatLng(34.1962500000,108.8650100000); private static final LatLng marker7 = new LatLng(34.1958100000,108.8640800000); private static final LatLng marker8 = new LatLng(34.1964910000,108.8641510000); private static final LatLng marker9 = new LatLng(34.1944820000,108.8651110000); private static final LatLng marker10 = new LatLng(34.1945400000,108.8683700000); Context context; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_tracereload); ButterKnife.bind(this); context = this; init(); }/** * 初始化AMap对象 */ private void init() { processbar.setSelected(false); processbar.setOnClickListener(new View.OnClickListener() {@Override public void onClick(View v) { // TODO Auto-generated method stub} }); // 进度条拖动时 执行相应事件 processbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { // 复写OnSeeBarChangeListener的三个方法 // 第一个时OnStartTrackingTouch,在进度开始改变时执行 @Override public void onStartTrackingTouch(SeekBar seekBar) { // TODO Auto-generated method stub }// 第二个方法onProgressChanged是当进度发生改变时执行 @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { // TODO Auto-generated method stub latlngList_path.clear(); if (progress != 0) { for (int i = 0; i < seekBar.getProgress(); i++) { latlngList_path.add(latlngList.get(i)); } drawLine(latlngList_path, progress); }try { Thread.sleep(100); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } }// 第三个是onStopTrackingTouch,在停止拖动时执行 @Override public void onStopTrackingTouch(SeekBar seekBar) {latlngList_path.clear(); int current = seekBar.getProgress(); if (current != 0) { for (int i = 0; i < seekBar.getProgress(); i++) { latlngList_path.add(latlngList.get(i)); } drawLine(latlngList_path, current); } } }); // 初始化runnable开始 runnable = new Runnable() { @Override public void run() { // TODO Auto-generated method stub handler.sendMessage(Message.obtain(handler, 1)); } }; // TODO Auto-generated method stub if (aMap == null) { aMap = ((SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map)).getMap(); if (aMap != null) { setUpMap(); } }}private void drawLine(ArrayList list, int current) {// TODO Auto-generated method stub aMap.clear(); LatLng replayGeoPoint = latlngList.get(current - 1); if (marker != null) { marker.destroy(); }// 添加人位置 MarkerOptions markerOptions = new MarkerOptions(); markerOptions .position(replayGeoPoint) .title("起点") .snippet(" ") .icon(BitmapDescriptorFactory .fromBitmap(BitmapFactory.decodeResource( getResources(), R.drawable.man))) .anchor(0.5f, 0.5f); marker = aMap.addMarker(markerOptions); // 增加起点开始 aMap.addMarker(new MarkerOptions() .position(latlngList.get(0)) .title("起点") .icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory .decodeResource( getResources(), R.drawable.nav_route_result_start_point)))); //// 增加起点结束 if (latlngList_path.size() > 1) { PolylineOptions polylineOptions = (new PolylineOptions()) .addAll(latlngList_path) .color(Color.rgb(9, 129, 240)).width(6.0f); aMap.addPolyline(polylineOptions); }if (latlngList_path.size() == latlngList.size()) { aMap.addMarker(new MarkerOptions() .position(latlngList.get(latlngList.size() - 1)) .title("终点") .icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory .decodeResource( getResources(), R.drawable.nav_route_result_end_point)))); }}private void setUpMap() { // TODO Auto-generated method stub// 加入坐标 latlngList.add(marker1); latlngList.add(marker2); latlngList.add(marker3); latlngList.add(marker4); latlngList.add(marker5); latlngList.add(marker6); latlngList.add(marker7); latlngList.add(marker8); latlngList.add(marker9); latlngList.add(marker10); // latlngList_path.add(marker1); // 设置进度条最大长度为数组长度 processbar.setMax(latlngList.size()); aMap.setMapType(AMap.MAP_TYPE_NORMAL); //设置地图的放缩级别 aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latlngList.get(0), 15)); }public void btn_replay_click(View v) { // 根据按钮上的字判断当前是否在回放 if (replayButton.getText().toString().trim().equals("回放")) { if (latlngList.size() > 0) { // 假如当前已经回放到最后一点 置0 if (processbar.getProgress() == processbar.getMax()) { processbar.setProgress(0); } // 将按钮上的字设为"停止" 开始调用定时器回放 replayButton.setText(" 停止 "); timer.postDelayed(runnable, 10); } } else { // 移除定时器的任务 timer.removeCallbacks(runnable); replayButton.setText(" 回放 "); } }}


【Android|Android--高德地图通过经纬度简单的实现轨迹回放】图片资源在下载的高德地图demo里面可以找到。

    推荐阅读