我做到了这一点:
public class LongTravlOverlay extends Overlay{
private Projection projection;
private List<GeoPoint> glist;
GeoPoint gP1;
GeoPoint gP2;
public LongTravlOverlay(Projection a,List<GeoPoint> b){
projection=a;
this.glist=b;
}
public void draw(Canvas canvas, MapView mapv, boolean shadow){
super.draw(canvas, mapv, shadow);
Paint mPaint = new Paint();
mPaint.setDither(true);
mPaint.setColor(Color.BLUE);
mPaint.setStyle(Paint.Style.FILL_AND_STROKE);
mPaint.setStrokeJoin(Paint.Join.ROUND);
mPaint.setStrokeCap(Paint.Cap.ROUND);
mPaint.setStrokeWidth(3);
for(GeoPoint g1:glist)
{
if(gP1!=null)
{
gP1=gP2;
gP2=new GeoPoint(g1.getLatitudeE6(),g1.getLongitudeE6());
}
else
{
gP1=new GeoPoint(g1.getLatitudeE6(),g1.getLongitudeE6());
gP2=gP1;
continue;
}
Point p1 = new Point();
Point p2 = new Point();
Path path = new Path();
projection.toPixels(gP1, p1);
projection.toPixels(gP2, p2);
path.moveTo(p2.x, p2.y);
path.lineTo(p1.x,p1.y);
canvas.drawPath(path, mPaint);
}
}
}
它起作用并在所有点之间划线。 唯一的问题是在第一点和最后一点之间还有一条线,最终在其他点的路径上交叉。 我如何删除它?
答案 0 :(得分:0)
您的地理位置gP1和gP2是实例变量。 draw
将被多次调用。
在第一次调用draw
的迭代结束时,gP2
是最后一点。在第二次和后续调用draw
的第一次迭代中,gP1
被分配到最后一个点,gP2
被分配到您的第一个点。这在第一点和最后一点之间划了一条线。要解决这个问题,只需在draw
中声明这些变量,或者在迭代您的地理位置之前将其初始化为null。
gP1 = null;
gP2 = null;
for(GeoPoint g1:glist) {
//Drawing logic
}