android中给view添加遮罩层

news/2024/5/19 14:53:34

1.在 res 目录中添加 id :

<?xml version="1.0" encoding="utf-8"?>
<resources><item name="view_mask_id" type="id" />
</resources>

2.扩展方法:

/** 给一个 View 添加一层由 [res] 填充的遮罩层布局, 可通过 [isShowOrigin] 控制是否显示原始布局, 返回 [res] 填充后的布局. */
fun View?.addMask(@LayoutRes res: Int, isShowOrigin: Boolean = true): View? {this ?: run {Logs.w("addMask error! -----> view is null!")return null}val maskLayout = LayoutInflater.from(this.context).inflate(res, null, false)addMask(maskLayout, isShowOrigin)return maskLayout
}/** 给一个 View 添加一层 [maskLayout] 遮罩层布局, 可通过 [isShowOrigin] 控制是否显示原始布局. */
fun View?.addMask(maskLayout: View, isShowOrigin: Boolean = true) {this ?: run {Logs.w("addMask error! -----> view is null!")return}val parent = this.parent as? ViewGroupparent ?: run {Logs.w("addMask error! -----> parent is null!")return}val originLayout = thisval maskLayoutContainer = FrameLayout(originLayout.context)// 将原始布局替换为 container.originLayout.replaceWith(maskLayoutContainer)maskLayoutContainer.apply {val lp = FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.MATCH_PARENT)// 如果需要显示原始布局, 添加原始布局到 container 中.if (isShowOrigin) {maskLayoutContainer.addView(originLayout.apply { layoutParams = lp })}// 添加 mask 布局.maskLayoutContainer.addView(maskLayout.apply { layoutParams = lp })}originLayout.setTag(R.id.view_mask_id, maskLayoutContainer)
}/*** 移除遮罩层布局.*/
fun View?.removeMask() {this ?: let {Logs.w("removeMask error! -----> View is null!")return}val originLayout = thisval maskLayoutContainer = this.getTag(R.id.view_mask_id) as? ViewGroupmaskLayoutContainer ?: let {Logs.w("removeMask error! -----> maskLayout is null!")return}maskLayoutContainer.replaceWith(originLayout)
}/** 将 View 替换为 [res] 填充后的布局, 返回 [res] 填充后的布局. */
fun View?.replaceWith(@LayoutRes res: Int): View? {this ?: run {Logs.w("replaceWith error! -----> view is null!")return null}val replaceLayout = LayoutInflater.from(this.context).inflate(res, null, false)replaceWith(replaceLayout)return replaceLayout
}/** 将 View 替换为 [replaceView]. */
fun View?.replaceWith(replaceView: View) {this ?: run {Logs.w("replaceWith error! -----> view is null!")return}val parent = this.parent as? ViewGroupparent ?: run {Logs.w("replaceWith error! -----> parent is null!")return}val originView = thisval originViewIndex = parent.children.indexOf(originView)if (originViewIndex >= 0) {replaceView.id = originView.idparent.removeViewAt(originViewIndex) // 移除原始布局.replaceView.removeFromParent() // 添加之前, 先从父布局移除 replaceView.parent.addView(replaceView, originViewIndex, originView.layoutParams)} else {Logs.w("replaceWith error! -----> child index is $originViewIndex")}
}/** 将 View 从它的父布局移除. */
fun View?.removeFromParent() {this ?: run {Logs.w("removeFromParent error! -----> view is null!")return}val parent = this.parent as? ViewGroupparent ?: run {Logs.w("removeFromParent error! -----> parent is null!")return}parent.removeView(this)
}


http://www.mrgr.cn/p/75133872

相关文章

目录遍历-基于Pikachu的学习

目录遍历 原理 目录浏览漏洞是由于网站存在配置缺陷,存在目录可浏览漏洞,这会导致网站很多隐私文件与目录泄露,比如数据库备份文件、配置文件等,攻击者利用该信息可以更容易得到网站权限,导致网站被黑。 Pikachu 打开题目就是两个超链接,我随便点了一个发现url发现变化,有…

Testing Egineer note:2024_5_5-day05-part01

版本控制器之svn介绍 1.svn介绍(版本控制工具) 1、svn的定义: svn是一个开放源代码的版本控制系统,通过采用分支管理系统的高效管理,简而言之就是用于多个人共同开发同一个项目,实现共享资源,实现最终集中式个管理。 2.snv的作用: 在项目中对需求规格说明书,测试用例,…

[UDS][OTA] 自定义 IntelHEX (IHEX) format read/write library in C

参考修改 参考github的MIT协议开源项目 ihex 改写的代码 https://gitee.com/liudegui/intelhex-c 修改点&#xff1a; 修改Makefile脚本&#xff0c;支持x86_X64平台和aarch64平台将默认读取行长度设置为16位删除与ihex和bin之间的转换无关的示例代码 十六进制描述 HEX格式…

9.前端——HTML详细

HTML详解 Hyper Text Markup Language (超文本标记语言) HTML5 W3C(万维网联盟World Wide Web Consortium) 国际中立性技术标准机构 W3C标准包括结构化标准语言(HTML,XML) 表现标准语言(CSS) 行为标准(DOM,ECMAScript)网页基本结构 <!--网页基本结构--> <!--D…

HCIP第二节

OSPF&#xff1a;开放式最短路径协议&#xff08;属于IGP-内部网关路由协议&#xff09; 优点&#xff1a;相比与静态可以实时收敛 更新方式&#xff1a;触发更新&#xff1a;224.0.0.5/6 周期更新&#xff1a;30min 在华为设备欸中&#xff0c;默认ospf优先级是10&#…

Stable Diffusion WebUI 中文提示词插件 sd-webui-prompt-all-in-one

本文收录于《AI绘画从入门到精通》专栏,订阅后可阅读专栏内所有文章,专栏总目录:点这里。 大家好,我是水滴~~ 今天为大家介绍 Stable Diffusion WebUI 的一款中文提示词插件 sd-webui-prompt-all-in-one,就像它的名字一样,该插件几乎涵盖了提示词相关的所有功能。 文章内…

(搬运)碳知识大全

碳交易的一个小例子: 年初,有两个公司A和B,A公司每年规定排放二氧化碳100吨/年,B也是规定排放二氧化碳100吨/年;政府发放给A的碳配额是100吨/年,发放给B的碳配额也是100吨/年;2)年底,A公司通过节能改造,仅排放二氧化碳80吨,多余的20吨二氧化碳配额,就可以在碳交易市…

Over-Permission-基于Pikachu的学习

越权漏洞 原理 该漏洞是指应用在检查授权时存在纰漏,使得攻击者在获得低权限用户账户后,利用一些方式绕过权限检查,访问或者操作其他用户或者更高权限。越权漏洞的成因主要是因为开发人员在对数据进行增、删、改、查询时对客户端请求的数据过分相信而遗漏了权限的判定,一旦…

【喜报】科大睿智为武汉博睿英特科技高质量通过CMMI3级评估咨询工作

武汉博睿英特科技有限公司是信息通信技术产品、建筑智慧工程服务提供商。其拥有专注于航空、政府、教育、金融等多行业领域的资深团队&#xff0c;及时掌握最新信息通信应用技术&#xff0c;深刻理解行业业务流程&#xff0c;擅于整合市场优质资源&#xff0c;积极保持与高校产…

02_Modbus的功能码与报文详解

Modbus协议类型 Modbus从站四张表类型 主站常用功能码 Modbus TCP请求报文,功能码03Modbus TCP应答报文,功能码03 00 17为23个字节:请求长度加应答长度06+17=23; 14为20长度:14+06=20Modbus UDP请求报文,功能码03Modbus UDP应答报文,功能码03 Modbus RTU请求报文,功能…

Kubernetes-控制器

目录 一、ReplicationController 和 ReplicaSet 1.RC控制器 2.RS控制器 01.matchExpressions 匹配运算符 02. matchLabels 匹配标签 二、Deployment 1.命令行更新镜像版本 2.文件更新镜像版本 3.金丝雀部署 4.金丝雀标签部署 三、DaemonSet 四、Job 五、CronJob …

jenkins常用插件之Filesystem Trigger

安装插件 Filesystem Trigger 项目配置 验证 根据上述配置&#xff0c;当1.txt文件发生变化时&#xff0c;jenkins每分钟会进行检测&#xff0c;检测到后即进行任务构建&#xff0c;后续的具体操作可自行配置

爱普生S2D13V52快速实现车载显示屏高分辨率显示系统

随着时代的发展&#xff0c;汽车驾驶位前中央的显示屏承担的功能也越来越多&#xff0c;从一开始仅仅是显示仪表盘的信息&#xff0c;再到作为显示屏辅助倒车&#xff0c;再到如今和一块平板一样可公认娱乐&#xff0c;显示屏的大小有些时候成为了一辆车够不够好的体现。随着汽…

苹果挖走大量谷歌人才,建立神秘人工智能实验室;李飞飞创业成立「空间智能」公司丨 RTE 开发者日报 Vol.197

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real Time Engagement) 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文章 」、「有看点的 会议 」,但内容仅代表编辑…

openssh安装教程

openssh安装教程 安装openssh sudo yum install openssh使用命令查看是否成功安装openssh ps -auxf |grep ssh如果出现ssh相关内容,则说明成功安装 启动服务 sudo systemctl start sshd设置开机自启动服务 sudo systemctl enable sshd查看服务器的ip地址,方便用来远程连接 if…

1.python爬虫爬取视频网站的视频可下载的源url

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、爬取的源网站二、实现代码总结 一、爬取的源网站 http://www.lzizy9.com/ 在这里以电影片栏下的动作片为例来爬取。 可以看到视频有多页&#xff0c;因此需要…

5G Advanced and Release18简述

5G Advanced 5G-Advanced, formally defined in 3GPP Release 18, represents an upgrade to existing 5G networks. 先睹robot总结的5G Advanced的advancements: Enhanced Mobility and Reliability: 5G-Advanced will support advanced applications with improved mobility…

吴恩达机器学习-第三课-第二周

吴恩达机器学习 学习视频参考b站:吴恩达机器学习 本文是参照视频学习的随手笔记,便于后续回顾。 推荐系统(Recommender System) 提出建议 预测电影评分示例 用户给电影打1-5星,没看过不打分 n表示数量,r表示是否打分,y表示分数使用每个特征 电影特征,例如更倾向于爱情电…

CkickHouse JDBC 使用整理

1. pom 引入 <dependency><groupId>com.clickhouse</groupId><artifactId>clickhouse-jdbc</artifactId><version>0.4.6</version></dependency><dependency><groupId>org.roaringbitmap</groupId><arti…

https加密机制

参考:https://www.cnblogs.com/sxiszero/p/11133747.html 对称加密:只用一个秘钥的加解密,如果秘钥进行了泄漏,导致数据不安全 非对称加密:非对称加密算法需要一组密钥对,分别是公钥和私钥,这两个密钥是成对出现的。公钥加密的内容需要对应的私钥解密,私钥加密的内容需…