2012-07-05 71 views
2

我正在谷歌地圖工作。我想創建一個5到6個節點之間的路徑,我的意思是在點之間畫一條線。繪製點之間的路徑

下面的類是用於繪圖的內部類:

class MyOverlay extends Overlay{ 
    public void draw(Canvas canvas, MapView mapv, boolean shadow){ 
     super.draw(canvas, mapv, shadow); 

     Paint mPaint = new Paint(); 
     mPaint.setDither(true); 
     mPaint.setColor(Color.RED); 
     mPaint.setStyle(Paint.Style.FILL_AND_STROKE); 
     mPaint.setStrokeJoin(Paint.Join.ROUND); 
     mPaint.setStrokeCap(Paint.Cap.ROUND); 
     mPaint.setStrokeWidth(2); 

     GeoPoint gP1 = new GeoPoint(19240000,-99120000); 
     GeoPoint gP2 = new GeoPoint(37423157, -122085008); 
     GeoPoint gP3 = new GeoPoint(20000000 , -50000000) ; 
     GeoPoint[] G = new GeoPoint[3] ; 
     G[1] = gP1 ; 
     G[2] = gP2 ; 
     G[3] = gP3 ; 
     Point p1 = new Point(); 
     Point p2 = new Point(); 
     Point p3 = new Point() ; 
     Path path = new Path(); 

     projection.toPixels(gP1, p1); 
     projection.toPixels(gP2, p2); 
     projection.toPixels(gP3, p3) ; 
     //path.moveTo(p2.x, p2.y); 
     //path.lineTo(p1.x,p1.y); 
     //path.lineTo(p3.x, p3.y) ;  
     //canvas.drawLines(pts , mPaint) ; 
     canvas.drawPath(path, mPaint); 
    } 
} 

的這兩行代碼是從onCreate()方法在外部類中的代碼:

projection = mapView.getProjection(); 

mapOverlays.add(new MyOverlay()); 
+0

你應該添加你現在沒有做的路徑。 – Joru 2012-07-05 11:02:11

回答

0

我不熟悉與GeoPoint或MapView,所以你可能有其他問題,但我可以指出明顯的:

你已經註釋了生成路徑的行,所以你正在繪製一條空的路徑。如果取消對三行開始path.(但保留canvas.drawLines(...)評論),你應該p2p1線,另一個從p1p3,假設沒有別的錯誤。

1

以上答案是正確的 - 問題是您沒有將Point添加到您的Path。查看this的答案與您所做的完全相似。此外,draw()執行每次地圖需要重繪路線,這基本上是任何時候地圖moves.I有一個應用程序,我在MapView繪製路線,讓我告訴你,如果你的路線變長,你的地圖可以得到laggy。所以我會把你的Paint東西放到你的類的構造函數中,這樣你就不會在每次重繪路由時創建一個新的對象。另外,如果你打算繪製多個點,我會用一個類似的for循環:

Path path = new Path(); 
for(GeoPoint g : arrayOfGeoPoints) { 
      Point next = new Point(); 
      projection.toPixels(g, next); 
      path.lineTo(next.x, next.y); 
      path.moveTo(next.x, next.y); 
     } 
canvas.drawPath(path, myPaint); 

這很簡單,但可以通過多點快速,高效地進行迭代。

祝你好運!