2017-04-03 117 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的逻辑