绘制半径角Rect与透明

问题描述 投票:1回答:1

我正在使用这个库me.dm7.barcodescanner进行QrCode扫描。

问题是我不能用透明的黑色为背景着色,然后中心应该是透明的。我将中心颜色变为透明将消失(当然因为透明背景)。

它应该像第二个图像,其中背景是透明的黑色,中心是透明的,有角的半径Rect ..

码:

mFinderMaskPaint = new Paint();
mFinderMaskPaint.setColor(getResources().getColor(me.dm7.barcodescanner.core.R.color.viewfinder_mask));

..

public void drawViewFinderMask(Canvas canvas) {
     int width = canvas.getWidth();
     int height = canvas.getHeight();
     Rect framingRect = getFramingRect();

     RectF rectF = new RectF(framingRect.left, framingRect.top, framingRect.right, framingRect.bottom);
     canvas.drawRoundRect(rectF, 100, 100, mFinderMaskPaint);

//     canvas.drawRect(0, 0, width, framingRect.top, mFinderMaskPaint);
//     canvas.drawRect(0, framingRect.top, framingRect.left, framingRect.bottom + 1, mFinderMaskPaint);
//     canvas.drawRect(framingRect.right + 1, framingRect.top, width, framingRect.bottom + 1, mFinderMaskPaint);
//     canvas.drawRect(0, framingRect.bottom + 1, width, height, mFinderMaskPaint);
}

洙。目前我实现的目标是:

enter image description here

在设计上应该是这样的:enter image description here

android android-layout draw barcode-scanner
1个回答
1
投票

这里的诀窍不是填充圆形矩形的内部,而只填充外部。您可以通过更改圆角矩形的FillType来完成此操作。现在你需要使用Path

RectF rectF = new RectF(framingRect.left, framingRect.top, framingRect.right, framingRect.bottom);
final Path path = new Path()
path.addRoundRect(rectF, 100f, 100f, Path.Direction.CW)
path.setFillType(Path.FillType.INVERSE_WINDING)
canvas.drawPath(path, mFinderMaskPaint);
© www.soinside.com 2019 - 2024. All rights reserved.