填充箭头在画布Android中排成一行

时间:2017-01-06 05:46:55

标签: android canvas paint

arrow head stroke在画布上正常工作,但filled arrow head没有在正确的位置绘图,这是我的绘制箭头代码。

 private void drawArrow(Point startPoint, Point endPoint, Paint paint, Canvas mCanvas) {
        Path mPath = new Path();
        float deltaX = endPoint.x - startPoint.x;
        float deltaY = endPoint.y - startPoint.y;
        //float frac = (float) 0.1;
        int ARROWHEAD_LENGTH = 15;
        float sideZ = (float) Math.sqrt(deltaX * deltaX + deltaY * deltaY);
        float frac = ARROWHEAD_LENGTH < sideZ ? ARROWHEAD_LENGTH / sideZ : 1.0f;
        float point_x_1 = startPoint.x + (float) ((1 - frac) * deltaX + frac * deltaY);
        float point_y_1 = startPoint.y + (float) ((1 - frac) * deltaY - frac * deltaX);
        float point_x_2 = endPoint.x;
        float point_y_2 = endPoint.y;
        float point_x_3 = startPoint.x + (float) ((1 - frac) * deltaX - frac * deltaY);
        float point_y_3 = startPoint.y + (float) ((1 - frac) * deltaY + frac * deltaX);
        mPath.moveTo(point_x_1, point_y_1);
        mPath.lineTo(point_x_2, point_y_2);
        mPath.lineTo(point_x_3, point_y_3);
        //mPath.lineTo(point_x_1, point_y_1);
        //mPath.lineTo(point_x_1, point_y_1);
        mCanvas.drawPath(mPath, paint);
        invalidate();
    }

enter image description here

1 个答案:

答案 0 :(得分:0)

要解决此问题,我已将结束行放在三角形的中心。

您可以使用以下公式执行此操作:

float endLineX = (point_x_1 + point_x_2 + point_x_3) / 3;
float endLineY = (point_y_1 + point_y_2 + point_y_3) / 3;