在画布上画线,旁边有另一条虚线

时间:2017-04-03 08:14:08

标签: java android canvas

对于我正在处理的应用,我正在使用给定坐标在画布上绘制一条线。问题是我需要在它旁边画一条虚线。由于坐标来自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

3 个答案:

答案 0 :(得分:1)

您需要执行以下操作,考虑到虚线将在开始时在主线上方绘制并继续如下:

  1. 如果只有x正在改变,那么该线水平移动,您只需要将距离值添加到虚线的x坐标
  2. 如果只有y正在改变,那么该线正在移动,您只需要将距离值添加到虚线的y坐标
  3. 如果x为正数且x和y都在变化,那么您只需要添加y
  4. 如果x为负数且x和y都在变化,那么你只需要从y中减去......等等。
  5. 通过这种方式,您将跟踪原始线,始终执行操作时记住坐标的最后一个值并将它们与新坐标值进行比较。

答案 1 :(得分: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);

答案 2 :(得分: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的逻辑