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);
}

0 ответов

Другие вопросы по тегам