#java #android #canvas #path
#java #Android #холст #путь
Вопрос:
Мне нужно залить цветом область заданного полигона на пользовательском представлении. Я не могу найти метод, с помощью которого я могу использовать для этого вопроса.
На самом деле я могу рисовать только линии, соединяющие эти точки, но я не уверен, как заполнить область, окруженную ими.
Следующий код, который я использую для рисования линий:
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);
}
Выше показаны линии между каждой точкой, образующие полигоны различной формы. Смотрите скриншот ниже.
Итак, я хотел бы заполнить область внутри полигона, как показано ниже:
Спасибо за ваше время.
Ответ №1:
Вам нужно установить Paint.Стиль в 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);
Комментарии:
1. @Krul Вероятно, нет, я полагаю, по умолчанию он игнорирует стиль, но вы, вероятно, можете использовать
drawLines
вместо этого2. Я уже рисую линии, теперь мне нужно заполнить область, окруженную линиями.
3. @Krul Да, я знаю, я говорю, что вместо использования
drawLine
вы можете использоватьdrawLines
или возможное использованиеdrawRect(RectF rect, Paint paint)
4. Хммм… ну, но формы не всегда прямоугольные.
5. @Krul Я знаю, именно поэтому я говорил использовать DrawLines, проверьте основной пост