我正在使用Paths在画布上绘制形状。其中一些是完全不透明的,一些具有非常小的α值,以稍微改变底层形状的颜色。问题是,当我的一个形状中有一个小角度的小角度时,它似乎会产生两个形状......
有三种颜色值,虽然它只是背景上的一种形状。
如果我将右下角稍微向右移动一切都很好。
这里发生了什么?
这是我的代码(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或普通视图中使用此代码段,您将看到:
@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);
}