我想创建一个类似于谷歌地图的功能。我希望在一个人开始步行/驾驶时更新我的位置标记。我正在考虑使用LocationListner的onLocationChange方法,但我不确定。我还想在Google Maps上绘制路径以更新位置。
欢迎提出所有建议。
ItemizedOverlay:-
欢迎提出所有建议。
ItemizedOverlay:-
public class LocationOverlay extends ItemizedOverlay<OverlayItem>{
private List<OverlayItem> myOverlays;
Path path;
static int cnt = -1;
public LocationOverlay(Drawable defaultMarker) {
super(boundCenterBottom(defaultMarker));
System.out.println("Normal...");
myOverlays = new ArrayList<OverlayItem>();
}
public void addOverlay(OverlayItem overlay) {
System.out.println("Add Overlay called");
myOverlays.add(overlay);
populate();
cnt++;
}
@Override
protected OverlayItem createItem(int i) {
return myOverlays.get(i);
}
public void removeItem(int i) {
myOverlays.remove(i);
populate();
}
@Override
public int size() {
return myOverlays.size();
}
@Override
public void draw(Canvas canvas, final MapView mapView, boolean shadow) {
if (shadow) {
paint.setDither(true);
paint.setColor(Color.RED);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeJoin(Paint.Join.ROUND);
paint.setStrokeCap(Paint.Cap.ROUND);
paint.setStrokeWidth(4);
path = new Path();
Point point1 = new Point();
Projection projection = mapView.getProjection();
if (myOverlays.size() > 1) {
System.out.println(">>>>>>>>>>>");
for (int i = 0, j=i; i < myOverlays.size(); i++) {
Point point1 = new Point();
Point point2 = new Point();
projection.toPixels(myOverlays.get(i).getPoint(), point1);
System.out.println(">>>>>>>>>>>");
projection.toPixels(myOverlays.get(j++).getPoint(), point2);
System.out.println("Point == " + j);
path.moveTo(point2.x, point2.y);
path.lineTo(point1.x, point1.y);
canvas.drawPath(path, paint);
super.draw(canvas, mapView, shadow);
}
}
}
canvas.drawPath(path, paint);
super.draw(canvas, mapView, shadow);
}
}
注意 - draw方法会在单个locationChanged事件中被多次调用。
编辑 :-
我能够在任何位置变化时绘制路径,但我遇到了一个小问题。它每次都从起点开始绘制路径。我希望从上一个地点开始绘制路径(即从上一个位置连接到下一个位置)。为了更好的理解,我附上一张图片。
从图片中可以看出,起点也连接到了终点。我不希望这样。有什么想法吗?
RouteEntity.RoutePoint
=GeoPoint
和mPoints
=ArrayList<GeoPoint>
。 - Pavel Dudkadraw()
中分配内存是极其糟糕的想法 - 将您的Paint分配移开draw()
3)将描边宽度增加至少10像素,这样您才能真正看到您的路径 :) 4)通过跳过阴影通道来优化draw()
。当shadow == true
时,只需return
- Pavel Dudkaclose()
方法来关闭你的路径?如果是,这就是为什么最后一个点连接到第一个点的原因。 - Pavel Dudka