Android 使用GPS實時記錄運動路線
使用GPS實時記錄運動路線,沒有經過真機測試但是理論上應該沒問題 等有流量后進行一下性能測試
主要思路就是使用list實時記錄運動坐標 , 繼承 Overlay,并重寫draw方法,在draw方法中通過list的數值畫出path。
首先聲明list private List<GeoPoint> gPointList = new ArrayList<GeoPoint>();
繼承Overlay class MyOverlay extends Overlay {
@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow) {
// TODO Auto-generated method stub
super.draw(canvas, mapView, shadow);
//Log.i(TAG, "draw");地圖變化時候不斷重繪
// 畫筆
Paint paint = new Paint();
paint.setColor(Color.RED);
paint.setDither(true);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeJoin(Paint.Join.ROUND);
paint.setStrokeCap(Paint.Cap.ROUND);
paint.setStrokeWidth(2);
Projection projection = mapView.getProjection();
Path path = new Path();
if (gPointList.size()>1) {//2
Point p1 = new Point();
projection.toPixels(gPointList.get(0), p1);
path.moveTo(p1.x, p1.y);
for (int i = 0; i < gPointList.size()-1; i++) {
Point p2 = new Point();
projection.toPixels(gPointList.get(i+1), p2);
path.lineTo(p2.x, p2.y);
Log.i(TAG, ""+p2.x+""+p2.y);
}
canvas.drawPath(path, paint);// 畫出路徑
}
}
}
顯示在map上
//繪制路徑 gpoint1 = new GeoPoint((int) (lat * 1000000),
(int) (lng * 1000000));
gPointList.add(gpoint1);
myOverlay = new MyOverlay();
overlays.add(myOverlay);
4月20日 發現 如果放到線程里 貌似更好 可以設置多少時間取樣 class ThreadGetRoute implements Runnable {
public void run() {
try {
gpoint1 = new GeoPoint((int) (lat * 1000000),
(int) (lng * 1000000));
gPointList.add(gpoint1);
myOverlay = new MyOverlay();
overlays.add(myOverlay);
Thread.sleep(10000);
} catch (Exception e) {
e.printStackTrace();
}
}
}