android百度地图轨迹,android百度地图轨迹回放

本文介绍了一个Android应用中的轨迹回放功能实现,使用百度地图API创建了一个可以播放预设路径的示例。代码中包含了地图初始化、路径点的设置、暂停和重置操作,以及使用Handler进行动画绘制的逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//小白,代码质量不高,高手勿喷

package baidumapsdk.demo;

import java.util.LinkedList;

import java.util.Timer;

import java.util.TimerTask;

import com.baidu.mapapi.common.SysOSUtil;

import com.baidu.mapapi.map.BaiduMap;

import com.baidu.mapapi.map.BitmapDescriptor;

import com.baidu.mapapi.map.BitmapDescriptorFactory;

import com.baidu.mapapi.map.MapView;

import com.baidu.mapapi.map.Marker;

import com.baidu.mapapi.map.MarkerOptions;

import com.baidu.mapapi.map.OverlayOptions;

import com.baidu.mapapi.map.Polyline;

import com.baidu.mapapi.map.PolylineOptions;

import com.baidu.mapapi.model.LatLng;

import android.app.Activity;

import android.os.Bundle;

import android.os.Handler;

import android.os.SystemClock;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.Toast;

/**

* 轨迹回放

* @ClassName: VTPActivity

* @Description: TODO

* @author shimy

* @date 2015-12-8 上午7:59:31

*

*/

public class VTPActivity extends Activity{

//地图

private MapView mMapView;

private BaiduMap mBaiduMap;

private Button mBtnPause;//暂停

private Button mBtnStart;//开始

private Button mBtnReset;//重置

//定义带纹理的折线覆盖物,即划线

Polyline mTPolyline;

//相关坐标的集合

private LinkedList points;

private LinkedList pointes;

//起点和重点的坐标

private Marker mMkStart;

private Marker mMkEnd;

//记录从哪一点开始的索引

private static int index = 0;

/**

* fromAsset:根据资源名称创建bitmap描述信息

* 地图描述,获取assets的资源

*/

BitmapDescriptor mGreenTexture = BitmapDescriptorFactory.fromAsset("icon_road_green_arrow.png");

BitmapDescriptor mStartTexture = BitmapDescriptorFactory.fromAsset("icon_st.png");

BitmapDescriptor mEndTexture = BitmapDescriptorFactory.fromAsset("icon_en.png");

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_vtp);

//地图初始化

mMapView = (MapView) findViewById(R.id.vtpmapview);//初始化地图

mBaiduMap = mMapView.getMap();//获取地图对象

pointes = new LinkedList();

//ui初始化

mBtnPause = (Button) findViewById(R.id.pause);

mBtnStart = (Button) findViewById(R.id.start);

mBtnReset = (Button) findViewById(R.id.clear);

LatLng p1 = new LatLng(39.965, 116.444);

LatLng p2 = new LatLng(39.925, 116.494);

LatLng p3 = new LatLng(39.955, 116.534);

LatLng p4 = new LatLng(39.905, 116.594);

LatLng p5 = new LatLng(39.965, 116.644);

LatLng p6 = new LatLng(39.965, 116.694);

LatLng p7 = new LatLng(39.965, 116.744);

LatLng p8 = new LatLng(39.965, 116.694);

LatLng p9 = new LatLng(39.965, 116.844);

LatLng p10 = new LatLng(39.965, 116.894);

points = new LinkedList();

points.add(p1);

points.add(p2);

points.add(p3);

points.add(p4);

points.add(p5);

points.add(p6);

points.add(p7);

points.add(p8);

points.add(p9);

points.add(p10);

//重置,清除所有的覆盖物

OnClickListener resetListener = new OnClickListener() {

@Override

public void onClick(View v) {

handler.sendEmptyMessage(2);

}

};

//暂停

OnClickListener pauseListener = new OnClickListener() {

@Override

public void onClick(View v) {

handler.removeMessages(0);

handler.removeMessages(3);

handler.sendEmptyMessage(1);

}

};

//开始

OnClickListener startListener = new OnClickListener() {

@Override

public void onClick(View v) {

handler.sendEmptyMessage(0);

}

};

mBtnReset.setOnClickListener(resetListener);

mBtnPause.setOnClickListener(pauseListener);

mBtnStart.setOnClickListener(startListener);

}

private LatLng latOne;

private LatLng latTwo;

Handler handler = new Handler(){

public void handleMessage(android.os.Message msg) {

switch (msg.what) {

case 0://开始绘制

pointes.clear();//清除2个点的位置坐标

sendEmptyMessage(3);

break;

case 1://暂停绘制,记录当前坐标

Toast.makeText(getApplicationContext(), "暂停", Toast.LENGTH_LONG).show();

break;

case 2://清除地图上所有的覆盖物

mMapView.getMap().clear();//清除地图上所有的覆盖物

index = 0;

break;

case 3://循环

if (points.size() == 1 && points!=null) {//只有一个点时

MarkerOptions optionsStart = new MarkerOptions().position(points.getFirst())

.icon(mStartTexture);

mMkStart = (Marker) mBaiduMap.addOverlay(optionsStart);

}else if (points.size()>1) {//多于一个点时

if (points.size() == (index+1)) {//倒数第二个点,终点

MarkerOptions optionsEnd = new MarkerOptions().position(points.getLast())

.icon(mEndTexture);

mMkEnd = (Marker) mBaiduMap.addOverlay(optionsEnd);//添加覆盖物

index = 0;

sendEmptyMessage(4);

}else {//不是最后一个点

if (index == 0) {//第一个点、

//MarkerOptions绘制点(覆盖物)

MarkerOptions optionsStart = new MarkerOptions().position(points.getFirst())

.icon(mStartTexture);

mMkStart = (Marker) mBaiduMap.addOverlay(optionsStart);

sendEmptyMessageDelayed(5, 1000);

}else {

//两个点连线

latOne = points.get(index);

latTwo = points.get(index+1);

pointes.add(latOne);

pointes.add(latTwo);

//OverlayOptions绘制线(覆盖物)

OverlayOptions options = new PolylineOptions().width(10).dottedLine(true)

.points(pointes).customTexture(mGreenTexture);

mTPolyline = (Polyline) mBaiduMap.addOverlay(options);

index ++;//索引

sendEmptyMessageDelayed(0, 1000);

}

}

}

break;

case 4:

Toast.makeText(getApplicationContext(), "这是您最后的轨迹", Toast.LENGTH_LONG).show();

break;

case 5://从第一个点绘制连线

//两个点连线

latOne = points.get(index);

latTwo = points.get(index+1);

pointes.add(latOne);

pointes.add(latTwo);

//OverlayOptions绘制线(覆盖物)

OverlayOptions options = new PolylineOptions().width(10).dottedLine(true)

.points(pointes).customTexture(mGreenTexture);

mTPolyline = (Polyline) mBaiduMap.addOverlay(options);

index ++;//索引

sendEmptyMessageDelayed(0, 1000);

break;

default:

break;

}

};

};

}

原文:http://www.cnblogs.com/ayue-1994-com/p/5029396.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值