画布drawPath具有直角和透明度

时间:2013-12-30 21:50:45

标签: android android-canvas surfaceview

我正在使用Paths在画布上绘制形状。其中一些是完全不透明的,一些具有非常小的α值,以稍微改变底层形状的颜色。问题是,当我的一个形状中有一个小角度的小角度时,它似乎会产生两个形状......

enter image description here

有三种颜色值,虽然它只是背景上的一种形状。

enter image description here

如果我将右下角稍微向右移动一切都很好。

这里发生了什么?

这是我的代码(Anchor == Point):

    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或普通视图中使用此代码段,您将看到:

enter image description here

    @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 个答案:

没有答案