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博客

相关推荐
lichenyang45316 小时前
从 AI 聊天组件源码复盘工程化架构:MVVM、解耦、Provider 与 SSE 流式响应
前端
Maimai1080816 小时前
TanStack Table 入门:为什么它是 React 表格开发里的“表格引擎”
前端·javascript·react.js·架构·前端框架·reactjs
踩着两条虫16 小时前
VTJ.PRO 开源 AI 低代码引擎深度评测大纲
前端·低代码·开源软件
tryqaaa_16 小时前
学习日志(三)【php语法学习,iscc校赛wp】
android·网络协议·学习·安全·web安全·web
你听得到1116 小时前
从 Figma 走查到 AI 可验证产物:我如何重构客户端 UI 交付链路
前端·vue.js·flutter
Moment16 小时前
开发Agent为什么必须先做意图识别?
前端·后端·面试
小糖学代码16 小时前
LLM系列:1.python入门:12.异常处理(Exceptions)
前端·人工智能·python·深度学习
plainGeekDev17 小时前
Kotlin协程面试题:suspend原理都说不清,协程你真会用?
android·面试·kotlin
追忆31817 小时前
我为什么自己做了一个密码生成工具:聊聊 Web Crypto API 在前端随机数生成中的实践
前端
葬送的代码人生17 小时前
从零到一:AI 全栈开发入门 —— 构建一个简单的用户聊天系统
前端·javascript·架构