Android开源:EasyGuideLayer

简介: 这可能是最简单、灵活、强大的页面蒙层组件了!顾名思义,EasyGuideLayer是用于进行Android页面蒙层引导的组件。

这可能是最简单、灵活、强大的页面蒙层组件了!顾名思义,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开源库地址:

https://github.com/yjfnypeu/EasyAndroid

EasyGuideLayer组件地址:

https://github.com/yjfnypeu/EasyAndroid/blob/master/utils/src/main/java/com/haoge/easyandroid/easy/EasyGuideLayer.kt

最后

感谢你到这里,喜欢的话请帮忙点个赞让更多需要的人看到哦。更多Android进阶技术,面试资料整理分享,职业生涯规划,产品,思维,行业观察,谈天说地。可以加Android架构师群;701740775。

相关文章
|
6月前
|
XML Android开发 数据安全/隐私保护
Android 自定义开源库 EasyView
Android 自定义开源库 EasyView
|
3月前
|
监控 Java API
Android经典实战之OkDownload:一个经典强大的文件下载开源库,支持断点续传
本文介绍的 OkDownload 是一个专为 Android 设计的开源下载框架,支持多线程下载、断点续传和任务队列管理等功能,具备可靠性、灵活性和高性能特点。它提供了多种配置选项和监听器,便于开发者集成和扩展。尽管已多年未更新,但依然适用于大多数文件下载需求。
308 1
|
5月前
|
存储 API 开发工具
kotlin安卓开发,如何获取设备的唯一id, 有哪些开源库
在Kotlin的Android开发中,获取设备唯一ID的方法包括不稳定的ANDROID_ID、需要权限的IMEI、使用UUID与SharedPreference结合,以及考虑隐私的Firebase Installations ID和Advertising ID。由于隐私问题和Google Play政策,IMEI和ANDROID_ID不推荐作为长期唯一标识。推荐使用UUID(首次安装时生成并存储),或在涉及广告时使用Advertising ID(需用户同意),而Firebase Installations ID则提供了一种合规的设备标识选项。在选择方法时,必须遵守隐私指南和政策。
|
小程序 JavaScript API
支付宝微信小程序连接蓝牙兼容IOS和安卓(开源)
支付宝微信小程序连接蓝牙兼容IOS和安卓(开源)
194 0
|
Android开发
Android图片加载开源库对比
Android图片加载开源库对比
107 0
|
Java 测试技术 Android开发
Sonic 开源移动端云真机测试平台 - 设备中心接入安卓设备实例演示,Agent端服务部署过程详解(下)
Sonic 开源移动端云真机测试平台 - 设备中心接入安卓设备实例演示,Agent端服务部署过程详解
409 0
|
Web App开发 JavaScript Java
Sonic 开源移动端云真机测试平台 - 设备中心接入安卓设备实例演示,Agent端服务部署过程详解(上)
Sonic 开源移动端云真机测试平台 - 设备中心接入安卓设备实例演示,Agent端服务部署过程详解
497 0
|
存储 ARouter Java
Android开源系列-组件化框架Arouter-(三)APT技术详解
最近组里需要进行**组件化框架**的改造,用到了**ARouter**这个开源框架,为了更好的对项目进行改造,笔者花了一些时间去了解了下ARouter
|
存储 缓存 ARouter
Android开源系列-组件化框架Arouter-(二)深度原理解析
最近组里需要进行**组件化框架**的改造,用到了**ARouter**这个开源框架,为了更好的对项目进行改造,笔者花了一些时间去了解了下ARouter
|
缓存 JSON ARouter
Android开源系列-组件化框架Arouter-(一)使用方式详解
最近组里需要进行**组件化框架**的改造,用到了`Arouter`这个开源框架,为了更好的对项目进行改造,笔者花了一些时间去了解了下`Arouter