Android 复习Path.Op.DIFFERENCE

复制代码
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的枚举对象含义我就不多说了,下面两个连接里很全了

  1. Android画布剪裁函数clipRect详解_android cliprect-CSDN博客

  2. Android中的裁剪中Region.Op参数的用法-CSDN博客

相关推荐
晚安日记wanna3 分钟前
简历写精通浏览器原理一问 URL 到渲染直接哑火...
前端·面试
hai_android5 分钟前
Android JNI 示例详解:Java 与 C++ 互调演示
android·java
晚安日记wanna7 分钟前
四年前端被问 Code Review90人只看得懂空格和命名
前端·面试
IPdodo_11 分钟前
curl 如何测试代理 IP?HTTP、SOCKS5 与认证参数示例
前端·网络·python·https·网络调试
做前端的娜娜子13 分钟前
施工蓝图:vite.config.js —— 项目的指挥中心
前端·react native·vite
宸翰14 分钟前
解决uni-app 中 SVG 图片在 iOS 端显示模糊问题
前端·uni-app
数据掘金14 分钟前
第三方 SDK 集体故障时,你的 App 会怎样?可落地的监控与降级方案
前端
AI分享猿25 分钟前
UI设计Prompt系列(十七):团队如何管理UI Prompt——减少产品、设计与开发之间的信息损耗
前端·prompt
资讯综合29 分钟前
2026全国云渲染网站排名 不同需求用户适配榜单
开发语言·前端·javascript
IT毕设实战小研38 分钟前
基于大数据的跨国外派人员适应满意度与留存影响因素可视化分析
android·java·大数据·python·django·课程设计