2017-04-03 116 views
0

對於我正在使用的應用程序,我正在使用給定座標在畫布上畫一條線。問題是我需要在它旁邊畫一條虛線。由於座標來自API,我只能使用這些座標來表示虛線。有什麼辦法可以做到這一點?我真的無法弄清楚。在畫布上用另一條虛線畫線

我想要什麼: enter image description here

我畫我的當前行的方式:

Path line = new Path(); 
boolean first = true; 
for (CircleArea circle : mCircles) { 

    canv.drawCircle(circle.getDrawX(), circle.getDrawY(), mCircleRadius, mCirclePaint); 
    if(!first) { 
     line.lineTo(circle.getDrawX(), circle.getDrawY()); 
    } else { 
     line.moveTo(circle.getDrawX(), circle.getDrawY()); 
    } 

    first = false; 
} 
canv.drawPath(line, mLinePaint); 

,樣品座標:

  • 50,50
  • 75,75
  • 100,75
  • 150,10
  • 170,10
  • 170,75
  • 160,75
+0

您能否提供您從服務器獲得的座標示例列表? –

+0

添加樣本座標,使用這些座標,畫布的最大x和y值爲200,100。 –

回答

0

這段代碼可以用來繪製一個破折號路徑

Paint paint = new Paint(); 
paint.setStyle(Paint.Style.STROKE); 
paint.setPathEffect(new DashPathEffect(new float[] {20,20}, 0)); 
paint.setColor(Color.RED); 
paint.setStrokeWidth(10); 
canvas.drawPath(line, paint); 
+0

這隻繪製一條虛線。我需要在它旁邊畫一條法線和一條虛線。 –

+0

您需要分別繪製這兩條線,並需要從實線路徑座標計算虛線的路徑座標。 – CodeCameo

+0

「計算虛線路徑的座標」部分是難點。 –

1

您需要請執行以下操作,考慮到虛線將在開始時在主線上方繪製並繼續如此:

  1. 如果只有x在變化,那麼這條線是水平移動的,您只需要將距離值添加到虛線的x座標上
  2. 如果只有y變化,僅用於將距離值添加到虛線的y座標
  3. 如果x爲正數並且x和y都在變化,那麼您只需要添加y如果x爲負值且x和y均爲那麼你只需要從y中減去...等

這樣你會跟蹤你的原點l線,始終在記住座標的最後一個值並將它們與新的值進行比較。

+0

當線的角度小於90度時,這不會產生問題嗎?你怎麼知道從什麼時候開始? –

+0

第3點和第4點將解決這個問題,你需要嘗試看看哪裏改變,我剛剛給你一個開始 – GingerHead

+0

你是否得到它的工作? – GingerHead

0

使用以下代碼:

if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) { 
      this.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 
     } 
     Paint p1 = new Paint(); 
     p1.setARGB(255,0,0,0); 
     p1.setStyle(Paint.Style.FILL_AND_STROKE); 

     p1.setStrokeWidth(10); 
     canvas.drawLine(0,50,500,550,p1); 
     p1.setPathEffect(new DashPathEffect(new float[] {20,20},0)); 
     canvas.drawLine(0,0,500,500,p1); 

以上代碼是創建在虛線行,如果x和y二者都改變的例子。將它與GingerHead的邏輯相結合,你會得到你想要的路徑。只需循環上面的代碼並添加GingerHead的邏輯