mLinePaint.setAntiAlias(true); mLinePaint.setStrokeWidth(4f); mLinePaint.setColor(Color.parseColor("#FFFFFFFF")); mLinePaint.setStyle(Paint.Style.STROKE); // 定义圆角矩形的边界RectF rectF = new RectF(lThumbWidth + lThumbOffset, 0f, rThumbOffset, height);// 定义圆角的半径float rx = 30f; // x轴方向的圆角半径float ry = 30f; // y轴方向的圆角半径// 创建一个矩形RectF rect2 = new RectF(0, 0, width, height);// 创建一个绘制矩形的路径Path rectPath = new Path();rectPath.addRect(rect2, Path.Direction.CW);// 创建一个绘制圆角矩形的路径Path circlePath = new Path();circlePath.addRoundRect(rectF, rx, ry, Path.Direction.CW);// 创建一个新的路径,用于存储挖去圆形后的矩形路径Path finalPath = new Path();finalPath.op(rectPath, circlePath, Path.Op.DIFFERENCE);// 使用canvas绘制这个新路径canvas.drawPath(finalPath, mBgPaint);// 使用Canvas的drawRoundRect方法绘制圆角矩形canvas.drawRoundRect(rectF, rx, ry, mLinePaint);
绘制完成后,表现出来的就是一个灰色的矩形,中间有一个圆角矩形的部分是没有灰色的,可以看到当前控件下方的ui
canvas.drawRoundRect(rectF, rx, ry, mLinePaint);是给这个圆角矩形添加边框
这种是在单个控件内挖出你想要的镂空,如果想要处理不完全重叠的两个控件,使用的就是clipRect和Region.Op
canvas.clipRect(0, 0, 300, 300); //在画布上裁剪出一个矩形
canvas.clipRect(200, 200, 500, 500, Region.Op.REPLACE); //在画布上裁剪出第二个矩形
Region.Op的枚举对象含义我就不多说了,下面两个连接里很全了
-
Android画布剪裁函数clipRect详解_android cliprect-CSDN博客
-
Android中的裁剪中Region.Op参数的用法-CSDN博客