Android 填充箭头在画布中沿直线移动

Android 填充箭头在画布中沿直线移动,android,canvas,paint,Android,Canvas,Paint,带有笔划的箭头在画布上工作良好,但是填充箭头没有在正确的位置绘制,这是我绘制箭头的代码 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

带有
笔划的
箭头
在画布上工作良好,但是
填充箭头
没有在正确的位置绘制,这是我绘制箭头的代码

 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();
    }
private void drawArrow(点起点、点端点、绘制、画布mCanvas){
路径mPath=新路径();
float deltaX=endPoint.x-startPoint.x;
float deltaY=endPoint.y-startPoint.y;
//浮动分数=(浮动)0.1;
int箭头长度=15;
float sideZ=(float)Math.sqrt(deltaX*deltaX+deltaY*deltaY);
浮动分数=箭头长度

为了解决这个问题,我将终点线放在三角形的中心

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

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

你能解释一下吗?