Android 具有直角和透明度的画布绘制路径

Android 具有直角和透明度的画布绘制路径,android,android-canvas,surfaceview,Android,Android Canvas,Surfaceview,我使用路径在画布上绘制形状。其中一些是完全不透明的,一些有非常小的alpha值,以稍微改变基础形状的颜色。问题是,当我的一个形状中有一个直角且alpha值很小时,它似乎从一个形状中生成了两个形状 有三个颜色值,尽管它只是背景上的一个形状 如果我把右下角的点稍微向右移动,一切都很好 这里发生了什么 这是我的代码锚==点: public void render() { mCanvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR

我使用路径在画布上绘制形状。其中一些是完全不透明的,一些有非常小的alpha值,以稍微改变基础形状的颜色。问题是,当我的一个形状中有一个直角且alpha值很小时,它似乎从一个形状中生成了两个形状

有三个颜色值,尽管它只是背景上的一个形状

如果我把右下角的点稍微向右移动,一切都很好

这里发生了什么

这是我的代码锚==点:

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

getColorInt、getAnchor、getAncorCount不是标准android Shape类的方法。锚类似乎也不是标准SDK的一部分。如果他们是第三方,哪个图书馆?如果它们是你自己的,请发布代码。这是我自己的代码,但我认为这不相关。颜色保存为AARGGBB字符串,getColorInt返回Color.parseString int值。锚点只是一个二维点,锚点计数是形状包含的二维点的数量。希望这能澄清问题。谢谢。在这种情况下,很难看到代码中有任何明显的错误。你能编辑你的问题,在你的屏幕截图下列出一组形状和它们的定位点坐标,以帮助解决这个问题吗?当我删除每一个不必要的信息,为你提供这个错误发生的最基本的设置时,我找到了解决方案。当我移除paint.setAntiAliastrue时,一切正常,但我没有抗锯齿。。。对于每一个感兴趣并想玩的人,也许可以找出为什么会发生这种情况,我在我的作品中添加了一段代码。谢谢大家!
    @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);
}