Как нарисовать заполненный полигон на холсте - PullRequest
0 голосов
/ 27 марта 2019

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

На самом деле я могу рисовать только линии, соединяющие эти точки, но я не уверен, как заполнить область, окруженную ими.

Следующий код, который я использую для рисования линий:


for (Path p : paths) {
                Paint color = p.getColor();
                float strokeW = color.getStrokeWidth();
                color.setStrokeWidth(pthStrokeWdth);

                List<Point> currentPath = p.getCoordinateList();
                for (int i = 1; i < currentPath.size(); i++) {
                    float startX = currentPath.get(i - 1).x;
                    float startY = currentPath.get(i - 1).y;
                    float endX = currentPath.get(i).x;
                    float endY = currentPath.get(i).y;
                    canvas.drawLine((startX * cellWidth) + xOffset + halfCellWidth, (startY * cellHeight) + yOffset + halfCellHeight,
                            (endX * cellWidth) + xOffset + halfCellWidth, (endY * cellHeight) + yOffset + halfCellHeight, color);

                }
                color.setStrokeWidth(originalStrokeWidth);
 }

Вышеупомянутые линии рисуют линии между каждой точкой, образующей многоугольники с различными формами.Смотрите скриншот ниже.

enter image description here

Поэтому я бы хотел заполнить область внутри полигона, как показано ниже:

enter image description here

Спасибо за ваше время.

1 Ответ

0 голосов
/ 27 марта 2019

Вам необходимо установить Paint.Style на FILL или FILL_AND_STROKE

paint.setStyle(Paint.Style.FILL);

Редактировать:

    Paint color = p.getColor();
    float strokeW = color.getStrokeWidth();
    color.setStrokeWidth(pthStrokeWdth);
    color.setStyle(Paint.Style.FILL);

    List<Point> currentPath = p.getCoordinateList();
    //for each path we want to draw a line which consist of 4 points
    float[] points = new float[currentPath.size() * 4];
    int count = 0;
    for (int i = 1; i < currentPath.size(); i++) {
        float startX = currentPath.get(i - 1).x;
        float startY = currentPath.get(i - 1).y;
        float endX = currentPath.get(i).x;
        float endY = currentPath.get(i).y;
        points[count++] = (startX * cellWidth) + xOffset + halfCellWidth;
        points[count++] = (startY * cellHeight) + yOffset + halfCellHeight;
        points[count++] = (endX * cellWidth) + xOffset + halfCellWidth;
        points[count++] = (endY * cellHeight) + yOffset + halfCellHeight, color;
    }
    canvas.drawLines(points, color);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...