Android 在同一个矩形上画两次看起来会有所不同

Android 在同一个矩形上画两次看起来会有所不同,android,android-graphics,Android,Android Graphics,我有一个自定义视图,我意识到有些线条看起来比其他线条暗。经过调查,我发现这不是一种感觉,而是现实。绘制它们的代码是相同的,但被多次调用。如果一次调用,则该行为浅灰色。如果我再叫一次,电话线将是深灰色的。为什么?(搭载安卓5.1的Nexus4) 这里是一个例子。右下角的瓷砖颜色较深 更新:第一个drawRoundRect负责。我注释掉了第二个,我可以在没有它的情况下复制这种行为。但老实说,第二次呼叫将正确地呈现为深灰色。但是为什么第一次调用会使它变轻呢?因为.setAntiAlias(true)

我有一个自定义视图,我意识到有些线条看起来比其他线条暗。经过调查,我发现这不是一种感觉,而是现实。绘制它们的代码是相同的,但被多次调用。如果一次调用,则该行为浅灰色。如果我再叫一次,电话线将是深灰色的。为什么?(搭载安卓5.1的Nexus4)

这里是一个例子。右下角的瓷砖颜色较深


更新:第一个
drawRoundRect
负责。我注释掉了第二个,我可以在没有它的情况下复制这种行为。但老实说,第二次呼叫将正确地呈现为深灰色。但是为什么第一次调用会使它变轻呢?

因为
.setAntiAlias(true)形状的边缘与已经存在的颜色混合


因此,它不是像第一次使用一样将
DKGRAY
与白色混合,而是将
DKGRAY
DKGRAY
混合,使外观更暗。

谢谢,很好的捕捉。如果我关掉它,这种行为就消失了。另一方面,它看起来丑陋没有抗锯齿。无论打多少电话,我怎么能既有漂亮的外表又有相同的外表?我尝试实现高亮显示——当用户选择一个平铺时,我会改变背景颜色。当他选择另一块瓷砖时,我想把它画成以前的样子。当有变化时,你可以重新画整个场景,每一块瓷砖只画一次突出显示的颜色,或者没有。我可以试着测量一下时间。我可能过度优化了代码。我想到了另一个解决方案——记住内存中的磁贴(位图??)并将其涂成黑色,糟糕的是:-)许多游戏每秒重画整个屏幕60次,这只是在用户更改所选磁贴时重画。“但当我第二次重画屏幕时,所有线条现在都改变颜色”你必须首先将画布清除为白色。
bgPaint = new Paint();
bgPaint.setAntiAlias(true);
bgPaint.setStyle(Paint.Style.FILL);
bgPaint.setColor(Color.LTGRAY);

borderPaint = new Paint();
borderPaint.setAntiAlias(true);
borderPaint.setStyle(Paint.Style.STROKE);
borderPaint.setColor(Color.DKGRAY);

canvas.drawRoundRect(new RectF(tile.getX() + 1, tile.getY() + 1, tile.getXx() - 1, tile.getYy() - 1),
        roundRadius, roundRadius, borderPaint);
canvas.drawRoundRect(new RectF(tile.getX() + 1, tile.getY() + 1, tile.getXx() - 1, tile.getYy() - 1),
        roundRadius, roundRadius, bgPaint);