Android开源:EasyGuideLayer
这可能是最简单、灵活、强大的页面蒙层组件了!顾名思义,EasyGuideLayer是用于进行Android页面蒙层引导的组件。
特性
- 链式调用。调用逻辑清晰直观
- 支持同时设置多个引导层
- 支持高亮区域的自定义绘制
- 支持高亮区域点击监听
- 支持指定任意View设置蒙层引导
- 支持进行蒙层展示、隐藏事件监听
- 支持直接使用drawable创建引导View
示例代码与效果图
1. 对Actiity进行蒙层展示:
CODE:
<pre style="margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; font-size: inherit; line-height: inherit; font-family: inherit; vertical-align: baseline; word-break: break-word;">
// 创建引导层展示item val item = GuideItem.newInstance(findViewById<View>(R.id.layer_layout)) // 引导view的相对位置 .setGravity(Gravity.BOTTOM) // 用于创建引导View的layout布局,此处为普通的TextView .setLayout(R.layout.guide_text_layout) // 设置展示的高亮块形状:椭圆形 .setHighLightShape(GuideItem.SHAPE_OVAL) // 此处进行引导View的时间、内容显示控制。比如此处修改TextView的显示内容 .setOnViewAttachedListener { view, controller -> (view as TextView).text = "此处展示下方的各种蒙层展示效果" } EasyGuideLayer.with(activity) // 使用activity实例进行创建。 .addItem(item) // 将引导层添加进来 .setDismissOnClickOutside(true)// 点击外部区域时自动隐藏 .show()
效果图:
2. 展示简单蒙层:无引导View
CODE:
<pre style="margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; font-size: inherit; line-height: inherit; font-family: inherit; vertical-align: baseline; word-break: break-word;">
// 提供统一的蒙层实例创建使用 private fun createDefaultGuide() = EasyGuideLayer.with(anchor)// 指定用于创建蒙层的View .setBackgroundColor(0x33000000) .setOnGuideShownListener { shown:Boolean -> EasyToast.DEFAULT.show("蒙层已${if (shown) "展示" else "消失"}") }.setDismissOnClickOutside(true) ... // 直接创建不添加引导View进行展示 createDefaultGuide().show()
效果图:
3. 展示gravitiy控制效果
CODE:
<pre style="margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; font-size: inherit; line-height: inherit; font-family: inherit; vertical-align: baseline; word-break: break-word;">
// 创建位置-文案关系列表。 private val gravities = listOf( Gravity.LEFT or Gravity.TOP to "左上", Gravity.TOP to "顶部", Gravity.RIGHT or Gravity.TOP to "右上", Gravity.LEFT to "左边", Gravity.RIGHT to "右边", Gravity.LEFT or Gravity.BOTTOM to "左下", Gravity.BOTTOM to "底部", Gravity.BOTTOM or Gravity.RIGHT to "右下" ) fun showWithGravity() { var index = 0 val item = GuideItem.newInstance(findViewById<View>(R.id.anchor_center)) // 设置gravity与通用引导View item.setGravity(gravities[index].first).setLayout(R.layout.guide_text_layout) item.setOnViewAttachedListener { view, controller -> (view as TextView).text = gravities[index].second view.setOnClickListener { // 点击后重置gravity信息并重新展示 try { index++ item.setGravity(gravities[index].first) controller.getGuideLayer().show() } catch (e:IndexOutOfBoundsException) { // 所有gravity效果展示完成后。让蒙层消失 controller.dismiss() } } } createDefaultGuide() .addItem(item) .show() }
效果图:
4. 展示不同的高亮样式
CODE:
<pre style="margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; font-size: inherit; line-height: inherit; font-family: inherit; vertical-align: baseline; word-break: break-word;">
val layer = createDefaultGuide() // 背景色调深点便于查看高亮块 layer.setBackgroundColor(0x66000000) // 顶部高亮块:使用椭圆形状 val topItem = GuideItem.newInstance(findViewById<View>(R.id.anchor_top)) .setHighLightShape(GuideItem.SHAPE_OVAL) .setOnHighLightClickListener { EasyToast.DEFAULT.show("顶部高亮区域被点击") } // 中间高亮块:使用矩形形状 val centerItem = GuideItem.newInstance(findViewById<View>(R.id.anchor_center)) .setHighLightShape(GuideItem.SHAPE_RECT) .setOnHighLightClickListener { EasyToast.DEFAULT.show("中央高亮区域被点击") } // 底部高亮块:使用自定义绘制,圆角矩形形状 val bottomItem = GuideItem.newInstance(findViewById<View>(R.id.anchor_bottom)) .setOnDrawHighLightCallback { canvas, rect, paint -> canvas.drawRoundRect(rect, 30f, 30f, paint) }.setOnHighLightClickListener { EasyToast.DEFAULT.show("底部高亮区域被点击") } layer.addItem(topItem).addItem(centerItem).addItem(bottomItem).show()
效果图:
5. 动态计算调整引导View位置
CODE:
<pre style="margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; font-size: inherit; line-height: inherit; font-family: inherit; vertical-align: baseline; word-break: break-word;">
val item = GuideItem.newInstance(findViewById<View>(R.id.anchor_center)) .setLayout(R.layout.guide_text_layout) .setOnViewAttachedListener { view, controller -> (view as TextView).text = "中央展示hehehehe " }.setOffsetProvider { point, rectF, view -> // 在此根据具体尺寸计算出中央位置 point.offset(((rectF.width() - view.width) / 2).toInt(), 0) }.setGravity(Gravity.TOP) createDefaultGuide().addItem(item).show()
效果图:
用法
具体用法说明请直接前往开源库进行详细了解:EasyGuideLayer
开源简介
EasyGuideLayer是开源基础组件集成库EasyAndroid中的基础组件之一。
EasyAndroid作为一款集成组件库,此库中所集成的组件,均包含以下特点,你可以放心使用~~
1. 设计独立
组件间独立存在,不相互依赖,且若只需要集成库中的部分组件。也可以很方便的只copy对应的组件文件进行使用
2. 设计轻巧
因为是组件集成库,所以要求每个组件的设计尽量精练、轻巧。避免因为一个小功能而引入大量无用代码.
每个组件的方法数均不超过100. 大部分组件甚至不超过50。
得益于编码时的高内聚性,若你只需要使用EasyGuideLayer. 那么可以直接去拷贝EasyGuideLayer源码文件到你的项目中,直接进行使用,也是没问题的。
EasyAndroid开源库地址:
EasyGuideLayer组件地址:
最后
感谢你到这里,喜欢的话请帮忙点个赞让更多需要的人看到哦。更多Android进阶技术,面试资料整理分享,职业生涯规划,产品,思维,行业观察,谈天说地。可以加Android架构师群;701740775。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
jQuery仿Android锁屏图案应用
在线演示 本地下载
- 下一篇
Android O 中的 seccomp 过滤器
在 Android 的设备中,强制执行 Android 安全模式的重任交由内核承担。由于安全团队已努力加强 Android 的用户空间,并隔离和削弱进程的权限。因此内核已成为更多安全攻击的焦点。系统调用是攻击者攻击内核的常用方式。 所有 Android 软件都使用系统调用(简写为 syscall)与 Linux 内核通信。内核提供许多基于设备和 SOC 的系统调用,让用户空间的进程(包括应用程序)直接与内核交互。所有应用都依赖此机制,通过唯一的系统调用来检索访问对应的行为,例如打开文件或发送一条 binder 消息。但是许多系统调用没有被 Android 使用或官方支持。 Android O 利用被称为 seccomp 的 Linux 功能,使得未使用的系统调用无法被应用程序访问。由于应用无法访问这些系统调用,因此无法被潜在的有害应用程序利用。 seccomp 过滤器 Android O 包含一个已被安装到 zygote (所有 Android 应用均派生自该进程) 中的 seccomp 过滤器。由于过滤器已安装到 zygote,对所有应用程序生效,Android 安全团队采取了额外的...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS关闭SELinux安全模块
- CentOS8安装Docker,最新的服务器搭配容器使用
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池