2012-05-13 57 views
1

的陣列我已經做到了這一點:安卓拉線愨點開始交叉線間結束

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

你有你的地點gP1和gP2作爲實例變量。 draw將被多次調用。

在您首次致電draw時的迭代結束時,gP2是最後一點。在draw的第二次和後續調用的第一次迭代中,將gP1分配給最後一個點,並將gP2分配給您的第一個點。這在第一點和最後一點之間畫出一條線。要糾正這種情況,只需在draw中聲明這些變量,或者在遍歷您的地址之前將其初始化爲空。

gP1 = null; 
gP2 = null; 
for(GeoPoint g1:glist) { 
//Drawing logic 
}