android百度地图轨迹回放

 

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

 


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<LatLng> points;
private LinkedList<LatLng> 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<LatLng>();
//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<LatLng>();
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;
}

};
};

}

 

posted on 2015-12-08 16:00  阿岳  阅读(1137)  评论(0编辑  收藏  举报

导航