首页 > 解决方案 > 你如何画一条只以 90 度角分开的线?

问题描述

我正在 Android Studio 中制作一个逻辑模拟器应用程序,我想让线图是水平的,如果有一个角度,那就是一条垂直线(没有对角线)。

目前,我的线绘制了从网格上的一个对象到下一个对象的最短路径。

public void drawWires(Canvas canvas, Paint paint){

    if (inputA != null){ drawWire(canvas, paint, inputA); }
    if (inputB != null){ drawWire(canvas, paint, inputB);}
}
public void drawWire(Canvas canvas, Paint paint, LogicNode input) {
    paint.setColor(Color.BLUE);
    paint.setStrokeWidth(5);
    canvas.drawLine( input.getX() +  input.getW() * 3/4,
            input.getY() + input.getH() * 1/ 2,
            this.getX() + this.getW() * 1/4,
            this.getY() + this.getH()* 1/2, paint);

}

我希望这条线看起来如何。 这是绘图在应用程序上的外观:http: //prntscr.com/q17rpg ...到目前为止我为实现新接线所做的工作:

  1. 在 ACTION_DOWN 上获取 X 和 Y
  2. 获取 ACTION_UP 上的 X 和 Y
  3. 从两个 X 和两个 Y 计算中点
  4. 计算斜边

在这一点上,我正在努力弄清楚我需要如何处理我拥有的价值观。比这更简单吗?我在想我需要线分割点 (X,0) 和 (0,Y) 我应该从获取中点值中得到。

标签: javaandroiddrawingpainttouch-event

解决方案


当您调用drawLine(float startX, float startY, float stopX, float stopY, Paint paint)并且想要一条水平线startY时,和的值stopY必须相同。

当您想要一条垂直startX线时,和的值stopX必须相同。

您的代码有:

canvas.drawLine(input.getX() + input.getW() * 3/4,
                input.getY() + input.getH() * 1/2,
                this.getX() + this.getW() * 1/4,
                this.getY() + this.getH() * 1/2, paint);

这不是试图绘制水平线垂直线。

要绘制 2(!) 条线连接(startX, startY)(stopX, stopY),第一行垂直,第二行水平

// Draw vertical line (using same X value)
canvas.drawLine(startX, startY,
                startX, stopY, paint);

// Draw horizontal line (using same Y value)
canvas.drawLine(startX, stopY,
                stopX, stopY, paint);

推荐阅读