一行代码简单实现Android遮罩镂空视图

在日常开发中,我们经常需要实现遮罩镂空的功能,例如扫码、引导页、遮挡层等等:
常见的遮罩镂空功能

通常我们会在每个需要的地方自定义一个View来实现,但如果项目有多个地方存在类似需求,就会产生大量样板代码,于是我做了一个开源Library项目,方便大家集成后,一行代码实现Android遮罩镂空视图。

使用方式:
1、集成Library

allprojects {
	repositories {
		...
		maven { url 'https://www.jitpack.io' }
	}
}
 implementation 'com.gitee.arcns.arc-fast:mask:1.12.0'

2、使用方式

<com.arc.fast.mask.MaskHollowView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center"
            app:maskHollowView_hollow_border_color="#FFFFFF"
            app:maskHollowView_hollow_border_size="4dp"
            app:maskHollowView_hollow_height="80dp"
            app:maskHollowView_hollow_margin_top="40dp"
            app:maskHollowView_hollow_radius="16dp"
            app:maskHollowView_hollow_width="80dp"
            app:maskHollowView_mask_background="#66000000" />

-MaskHollowView支持的参数

参数说明类型默认值
maskHollowView_hollow_width镂空区域的宽度,优先级最高dimension,例如100dp控件宽度的一半
maskHollowView_hollow_height镂空区域的高度,优先级最高dimension,例如100dp控件与宽度一致
maskHollowView_hollow_width_ratio镂空区域的宽度相对与控件宽度的比例float,例如0.5
maskHollowView_hollow_height_ratio镂空区域的高度相对与控件高度的比例float,例如0.5
maskHollowView_hollow_dimension_ratio镂空区域的宽高比例string,例如w,1:1
maskHollowView_hollow_margin_top镂空区域的上间距dimension,例如10dp0
maskHollowView_hollow_margin_bottom镂空区域的下间距dimension,例如10dp0
maskHollowView_hollow_margin_left镂空区域的左间距dimension,例如10dp0
maskHollowView_hollow_margin_right镂空区域的右间距dimension,例如10dp0
maskHollowView_hollow_margin_radius镂空区域的圆角dimension,例如10dp0
maskHollowView_hollow_margin_border_size镂空区域的边框大小dimension,例如10dp0
maskHollowView_hollow_margin_border_color镂空区域的边框颜色color,例如#FFFFFF
maskHollowView_hollow_border_rect镂空区域的边框矩形边长,如果该值大于0,则只会在镂空区域四个角的边框矩形内显示边框dimension,例如10dp0
maskHollowView_mask_background遮罩区域的背景颜色color,例如#66000000#66000000
android:gravity镂空区域相对于遮罩区域的位置gravity,例如topcenter

项目地址:
https://github.com/Arcns/arc-fast

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是使用Qt代码实现遮罩实现等待加载效果的示例代码: ```python from PyQt5.QtCore import QSize, Qt, QThread, pyqtSignal from PyQt5.QtGui import QMovie from PyQt5.QtWidgets import QApplication, QWidget, QLabel class LoadingMask(QWidget): def __init__(self, parent): super().__init__(parent) self.setFixedSize(parent.size()) self.setStyleSheet('background-color: rgba(0, 0, 0, 128);') self.movie = QMovie('loading.gif') self.movie.setScaledSize(QSize(100, 100)) label = QLabel(self) label.setMovie(self.movie) label.move(self.width() // 2 - 50, self.height() // 2 - 50) def start(self): self.movie.start() def stop(self): self.movie.stop() self.hide() class WorkerThread(QThread): finished = pyqtSignal() def run(self): # 模拟耗时操作 import time time.sleep(5) self.finished.emit() class MainWindow(QWidget): def __init__(self): super().__init__() self.setWindowTitle('遮罩实现等待加载效果') self.resize(500, 500) self.loading_mask = LoadingMask(self) self.worker_thread = WorkerThread(self) self.worker_thread.finished.connect(self.on_finished) def on_finished(self): self.loading_mask.stop() def do_something(self): self.loading_mask.start() self.worker_thread.start() if __name__ == '__main__': import sys app = QApplication(sys.argv) window = MainWindow() window.show() window.do_something() sys.exit(app.exec_()) ``` 这个示例代码中,首先定义了一个LoadingMask类,它继承自QWidget,用于实现遮罩层和等待加载动画的显示和隐藏。在LoadingMask的构造函数中,设置其大小和背景颜色,并创建一个QMovie用于加载动画gif,然后将QMovie放置在遮罩层中央。start和stop方法用于启动和停止动画和遮罩层的显示。 MainWindow继承自QWidget,是主窗口类。它包含了一个LoadingMask实例和一个WorkerThread实例。do_something方法用于启动等待加载的操作,它首先调用LoadingMask的start方法显示遮罩层和加载动画,然后启动WorkerThread执行耗时操作。WorkerThread是QThread的子类,用于模拟耗时操作,它执行完成后会发送一个finished信号。MainWindow的on_finished方法用于接收WorkerThread发送的finished信号,并调用LoadingMask的stop方法隐藏遮罩层和动画。 在主函数中,创建一个QApplication实例和MainWindow实例,然后调用MainWindow的show方法显示主窗口,并调用do_something方法启动等待加载的操作。最后调用QApplication的exec_方法进入Qt事件循环。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值