андроид холст нарисовать линию с указателем оканчивается стрелками с обеих сторон. кто-нибудь может мне помочь с этим.? - PullRequest
1 голос
/ 08 июня 2019
@Override
public void onDraw(Canvas canvas) {
    /*canvas.drawLine(0, 0, 20, 20, paint);
    canvas.drawLine(200, 0, 0, 200, paint);*/
    /*canvas.drawLine(downxpos, downypos, upxpos, upypos, paint);*/
    for (Line l : lines) {

        canvas.drawLine(l.startX, l.startY, l.stopX, l.stopY, paint);
    }
}

пример изображения

Я хотел бы нарисовать линию, как изображение, которое я показываю на холсте. Я могу нарисовать линию, но не знаю, как добавить к ней стрелки.

1 Ответ

1 голос
/ 08 июня 2019

Используйте эти методы для рисования стрелки с обеих сторон.

private void drawArrow1(Canvas canvas, Paint paint) {
    double degree = calculateDegree(x, x1, y, y1);
    float endX1 = (float) (x1 + ((10) * Math.cos(Math.toRadians((degree-30)+90))));
    float endY1 = (float) (y1 + ((10) * Math.sin(Math.toRadians(((degree-30)+90)))));

    float endX2 = (float) (x1 + ((10) * Math.cos(Math.toRadians((degree-60)+180))));
    float endY2 = (float) (y1 + ((10) * Math.sin(Math.toRadians(((degree-60)+180)))));

    canvas.drawLine(x1,y1,endX1,endY1,paint);
    canvas.drawLine(x1, y1, endX2,endY2,paint);
}

private void drawArrow(Canvas canvas, Paint paint) {

    double degree1 = calculateDegree(x1, x, y1, y);
    float endX11 = (float) (x + ((10) * Math.cos(Math.toRadians((degree1-30)+90))));
    float endY11 = (float) (y + ((10) * Math.sin(Math.toRadians(((degree1-30)+90)))));

    float endX22 = (float) (x + ((10) * Math.cos(Math.toRadians((degree1-60)+180))));
    float endY22 = (float) (y + ((10) * Math.sin(Math.toRadians(((degree1-60)+180)))));

    canvas.drawLine(x,y,endX11,endY11,paint);
    canvas.drawLine(x,y,endX22,endY22,paint);
}

public double calculateDegree(float x1, float x2, float y1, float y2) {
    float startRadians = (float) Math.atan((y2 - y1) / (x2 - x1));
    System.out.println("radian=====" + Math.toDegrees(startRadians));
    startRadians += ((x2 >= x1) ? 90 : -90) * Math.PI / 180;
    return Math.toDegrees(startRadians);
}

Где x, y - начальная точка, а x1, y1 - конечная точка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...