How do I draw an arrowhead (in Android)?

后端 未结 8 531
一个人的身影
一个人的身影 2020-11-29 06:29

I\'m fairly new to Android and have been toying around with Canvas. I\'m attempting to draw an arrow but I\'m only having luck with drawing the shaft, none of the arrowhead

8条回答
  •  南笙
    南笙 (楼主)
    2020-11-29 07:15

    Copypast from this answer https://stackoverflow.com/a/29383352/9975029

    private void fillArrow(Canvas canvas, float x0, float y0, float x1, float y1) {
        paint.setStyle(Paint.Style.FILL);
    
        float deltaX = x1 - x0;
        float deltaY = y1 - y0;
        double distance = Math.sqrt((deltaX * deltaX) + (deltaY * deltaY));
        float frac = (float) (1 / (distance / 30));
    
        float point_x_1 = x0 + (float) ((1 - frac) * deltaX + frac * deltaY);
        float point_y_1 = y0 + (float) ((1 - frac) * deltaY - frac * deltaX);
    
        float point_x_2 = x1;
        float point_y_2 = y1;
    
        float point_x_3 = x0 + (float) ((1 - frac) * deltaX - frac * deltaY);
        float point_y_3 = y0 + (float) ((1 - frac) * deltaY + frac * deltaX);
    
        Path path = new Path();
        path.setFillType(Path.FillType.EVEN_ODD);
    
        path.moveTo(point_x_1, point_y_1);
        path.lineTo(point_x_2, point_y_2);
        path.lineTo(point_x_3, point_y_3);
        path.lineTo(point_x_1, point_y_1);
        path.lineTo(point_x_1, point_y_1);
        path.close();
    
        canvas.drawPath(path, paint);
    }
    

提交回复
热议问题