1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Android--高德地图通过经纬度简单的实现轨迹回放

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

时间:2022-03-08 08:15:47

相关推荐

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

效果图:

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

/*** Created by Administrator on /5/31* <p>* desc:轨迹回放*/public class TraceReloadActivity extends FragmentActivity {private AMap aMap;private Marker marker = null;// 当前轨迹点图案public Handler timer = new Handler();// 定时器public Runnable runnable = null;// 存放所有坐标的数组private ArrayList<LatLng> latlngList = new ArrayList<LatLng>();private ArrayList<LatLng> latlngList_path = new ArrayList<LatLng>();// private ArrayList<LatLng> latlngList_path1 = new ArrayList<LatLng>();private OptionsPickerView mworkPickerView;private TimePickerView mstartPickerView,mendPickerView;List<String> names;@BindView(R.id.process_bar)SeekBar processbar;@BindView(R.id.btn_replay)Button replayButton;private Handler handler = new Handler() {@Overridepublic 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;@Overrideprotected 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() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stub}});// 进度条拖动时 执行相应事件processbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {// 复写OnSeeBarChangeListener的三个方法// 第一个时OnStartTrackingTouch,在进度开始改变时执行@Overridepublic void onStartTrackingTouch(SeekBar seekBar) {// TODO Auto-generated method stub}// 第二个方法onProgressChanged是当进度发生改变时执行@Overridepublic void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) {// TODO Auto-generated method stublatlngList_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 blocke.printStackTrace();}}// 第三个是onStopTrackingTouch,在停止拖动时执行@Overridepublic 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() {@Overridepublic void run() {// TODO Auto-generated method stubhandler.sendMessage(Message.obtain(handler, 1));}};// TODO Auto-generated method stubif (aMap == null) {aMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();if (aMap != null) {setUpMap();}}}private void drawLine(ArrayList<LatLng> list, int current) {// TODO Auto-generated method stubaMap.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) {// 假如当前已经回放到最后一点 置0if (processbar.getProgress() == processbar.getMax()) {processbar.setProgress(0);}// 将按钮上的字设为"停止" 开始调用定时器回放replayButton.setText(" 停止 ");timer.postDelayed(runnable, 10);}} else {// 移除定时器的任务timer.removeCallbacks(runnable);replayButton.setText(" 回放 ");}}}

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="/apk/res/android"android:id="@+id/activity_rootview"android:layout_width="match_parent"android:layout_height="match_parent"><FrameLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"><fragmentandroid:id="@+id/map"android:layout_width="match_parent"android:layout_height="match_parent"class="com.amap.api.maps.SupportMapFragment" /><LinearLayoutandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginBottom="26dp"android:layout_gravity="bottom"android:orientation="horizontal" ><SeekBarandroid:id="@+id/process_bar"android:layout_width="0dip"android:layout_height="wrap_content"android:layout_marginTop="1.0dip"android:layout_weight="1"android:layout_marginBottom="2.0dip"android:background="@drawable/btn_map_poi"android:max="0"android:clickable="false"android:paddingLeft="20dip"android:paddingRight="20dip"android:progress="0"android:progressDrawable="@drawable/seek_img"android:layout_gravity="center"/><Buttonandroid:id="@+id/btn_replay"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="5.0dip"android:layout_marginRight="9.0dip"android:layout_marginBottom="2.0dip"android:layout_marginTop="1.0dip"android:background="@drawable/btn_replay"android:onClick="btn_replay_click"android:text=" 回放 " /></LinearLayout></FrameLayout></RelativeLayout>

图片资源在下载的高德地图demo里面可以找到。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。