Вы должны создать собственный класс, расширяющий ItemizedOverlay, и в методе draw нарисовать линию на Canvas.
Например:
public class MyOverlay extends ItemizedOverlay<OverlayItem> {
private Projection projection;
private Point linePaint;
private Vector<GeoPoint> points;
public MyOverlay(Drawable defaultMarker) {
points = new Vector<GeoPoint>()
linePaint = new Paint();
//set color, stroke width etc.
}
public void addPoint(GeoPoint point) {
points.addElement(point);
}
public void setProjection(Projection projection) {
this.projection = projection;
}
public void draw(Canvas canvas, MapView mapView, boolean shadow) {
int size = points.size();
Point lastPoint = new Point();
projection.toPixels(points.get(0), lastPoint);
Point point = new Point();
for(int i = 1; i<size; i++){
projection.toPixels(points.get(i), point);
canvas.drawLine(lastPoint.x, lastPoint.y, point.x, point.y, linePaint);
lastPoint = point;
}
}
}
В onLocationChanged()
вы должны добавить новый геопункт через overlay.addPoint
.
В onCreate()
действия, где будет отображаться MapView, вы должны добавить
overlay = new MyOverlay(null); //overlay must be accessible from onLocationChanged
map.getOverlays().add(overlay); //map = (MapView) findViewById(R.id.mapview)
Вы также должны проверить при рисовании (или где-то еще), будет ли точка находиться в видимом прямоугольнике для увеличения скорости рисования.
Я не пытался это скомпилировать, поэтому не вините меня, если есть небольшие ошибки.