Canvas drawPath с прямым углом и прозрачностью
Я использую Пути, чтобы рисовать фигуры на холсте. Некоторые из них являются полностью непрозрачными, некоторые имеют очень маленькое альфа-значение, чтобы немного изменить цвет основной фигуры. Проблема в том, что когда у меня есть прямой угол в одной из моих фигур с небольшим значением альфа, кажется, что из двух фигур получается две...
Есть три цветовых значения, хотя это просто одна фигура на фоне.
Если я переместу правую нижнюю точку немного вправо, все будет хорошо.
Что здесь происходит?
Это мой код (Якорь == Точка):
public void render() {
mCanvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
for(Shape shape : shapes) {
renderShape(shape);
}
}
private void renderShape(Shape shape) {
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setStyle(Paint.Style.FILL);
paint.setColor(shape.getColorInt());
Path path = new Path();
Anchor first = shape.getAnchor(0));
path.moveTo(widthToScreenCoords(first.getX()), heightToScreenCoords(first.getY()));
for(int i = 1; i < shape.getAnchorCount(); i++) {
Anchor current = shape.getAnchor(i);
path.lineTo(widthToScreenCoords(current.getX()), heightToScreenCoords(current.getY()));
}
path.close();
mCanvas.drawPath(path, paint);
}
РЕДАКТИРОВАТЬ:
Как указано в моем комментарии: это происходит, когда вы используете сглаживание краски. Если кому-то интересно: используйте этот фрагмент в SurfaceView или нормальном View, и вы увидите:
@Override
protected void onDraw(Canvas canvas) {
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setColor(Color.parseColor("#12ffffff"));
Path path = new Path();
path.moveTo(0f,0f);
path.lineTo(300f, 0f);
path.lineTo(300f, 100f);
path.lineTo(0f, 300f);
path.close();
canvas.drawPath(path, paint);
}