用透明绘制半径角矩形
Draw radius corner Rect with transparent
我正在使用这个库进行 QrCode 扫描 me.dm7.barcodescanner
。
问题是我不能用透明的黑色给背景上色,然后中心应该是透明的。我将中心颜色变为透明将消失(当然是因为透明背景)。
它应该像第二张图片,背景是透明的黑色,中心是透明的,圆角半径为 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);
}
苏。我目前取得的成就是:
设计上应该是这样的:
这里的技巧不是填充圆角矩形的内部,而是只填充外部。您可以通过更改圆角矩形的 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);
我正在使用这个库进行 QrCode 扫描 me.dm7.barcodescanner
。
问题是我不能用透明的黑色给背景上色,然后中心应该是透明的。我将中心颜色变为透明将消失(当然是因为透明背景)。
它应该像第二张图片,背景是透明的黑色,中心是透明的,圆角半径为 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);
}
苏。我目前取得的成就是:
设计上应该是这样的:
这里的技巧不是填充圆角矩形的内部,而是只填充外部。您可以通过更改圆角矩形的 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);