Как нарисовать заполненный треугольник на холсте Android?

Итак, я рисую этот треугольник на картах Android, используя код ниже в моем методе рисования:

paint.setARGB(255, 153, 29, 29);
paint.setStyle(Paint.Style.FILL_AND_STROKE);
paint.setAntiAlias(true);

Path path = new Path();
path.moveTo(point1_returned.x, point1_returned.y);
path.lineTo(point2_returned.x, point2_returned.y);
path.moveTo(point2_returned.x, point2_returned.y);
path.lineTo(point3_returned.x, point3_returned.y);
path.moveTo(point3_returned.x, point3_returned.y);
path.lineTo(point1_returned.x, point1_returned.y);
path.close();

canvas.drawPath(path, paint);

PointX_returned - это координаты, которые я получаю из полей. Они в основном широты и долготы. В результате получается красивый треугольник, но инсайдер пуст, и поэтому я могу видеть карту. Есть ли способ как-нибудь его заполнить?

83
задан Paul 18 July 2013 в 10:42
поделиться

3 ответа

Вероятно, вам нужно сделать что-то вроде:

Paint red = new Paint();

red.setColor(android.graphics.Color.RED);
red.setStyle(Paint.Style.FILL);

И использовать этот цвет для вашего пути вместо вашего ARGB. Убедитесь, что последняя точка вашего пути заканчивается первой, это тоже имеет смысл.

Подскажите пожалуйста, сработает ли!

40
ответ дан 24 November 2019 в 08:52
поделиться

Хорошо, я сделал это. Я делюсь этим кодом на случай, если он понадобится кому-то еще:

super.draw(canvas, mapView, true);

Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);

paint.setStrokeWidth(2);
paint.setColor(android.graphics.Color.RED);     
paint.setStyle(Paint.Style.FILL_AND_STROKE);
paint.setAntiAlias(true);

Point point1_draw = new Point();        
Point point2_draw = new Point();    
Point point3_draw = new Point();

mapView.getProjection().toPixels(point1, point1_draw);
mapView.getProjection().toPixels(point2, point2_draw);
mapView.getProjection().toPixels(point3, point3_draw);

Path path = new Path();
path.setFillType(Path.FillType.EVEN_ODD);
path.moveTo(point1_draw.x,point1_draw.y);
path.lineTo(point2_draw.x,point2_draw.y);
path.lineTo(point3_draw.x,point3_draw.y);
path.lineTo(point1_draw.x,point1_draw.y);
path.close();

canvas.drawPath(path, paint);

//canvas.drawLine(point1_draw.x,point1_draw.y,point2_draw.x,point2_draw.y, paint);

return true;

Спасибо за подсказку, Николас!

74
ответ дан 24 November 2019 в 08:52
поделиться

вы также можете использовать vertice:

private static final int verticesColors[] = {
    Color.LTGRAY, Color.LTGRAY, Color.LTGRAY, 0xFF000000, 0xFF000000, 0xFF000000
};
float verts[] = {
    point1.x, point1.y, point2.x, point2.y, point3.x, point3.y
};
canvas.drawVertices(Canvas.VertexMode.TRIANGLES, verts.length, verts, 0, null, 0, verticesColors,   0, null, 0, 0, new Paint());
11
ответ дан 24 November 2019 в 08:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: