【问题标题】:Android drawing lines with arrowsAndroid 用箭头画线
【发布时间】:2014-12-13 06:46:45
【问题描述】:

我正在学习 java+android 和这个主题 Draw in Canvas by finger, Android 帮助我很多,让用户画线。但是,在我的应用程序中,我想为每一行添加一个箭头。它尝试使用 Path.lineTo 添加一个三角形,但问题是我无法将它旋转到正确的方向。

寻求帮助

【问题讨论】:

    标签: android html5-canvas drawing


    【解决方案1】:

    您将不得不做一些数学运算。假设你的线的最后一个点是 A,最后一个是 B。那么我们必须计算一个方向向量 D 作为 A-B。该向量应该被归一化,即除以它自己的长度,然后拉伸到你想要的箭头线的长度。对 A、B 和 D 使用 Androids PointF 类,它应该看起来像这样:

    PointF a = <initialize with last point of your line>
    PointF b = <initialize with last but one point of your line>
    // difference vector
    PointF d = new PointF(a.x-b.x, a.y-b.y);
    // normalize
    d.set(d.x / d.length(), d.y / d.length());
    // stretch to, say, 10 units
    d.set(10.0f * d.x, 10.0f * d.y);
    

    现在是旋转部分。我们要旋转 3/4*pi,一次顺时针,一次逆时针。我们可以使用rotation matrix 来做到这一点。对于二维的情况,很简单:

    float angle = 0.75f * Math.PI;
    PointF dLeft = new PointF(+d.x*Math.cos(-angle)-d.y*Math.sin(-angle),+d.x*Math.sin(-angle)+d.y*Math.cos(-angle));
    PointF dRight = new PointF(+d.x*Math.cos(+angle)-d.y*Math.sin(+angle),+d.x*Math.sin(+angle)+d.y*Math.cos(+angle));
    

    注意 dLeft 和 dRight 是方向向量。要计算箭头线的两个端点,您必须将它们添加到 A。因此,在伪(非 java)代码中您可以这样做:

    moveTo(A);
    lineTo(A+dLeft);
    moveTo(A);
    lineTo(A+dRight);
    

    希望这会奏效;祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-22
      • 2015-09-28
      • 2016-08-03
      • 1970-01-01
      • 2011-05-05
      • 2020-05-21
      相关资源
      最近更新 更多