原标题:EasyGuideLayer: 这可能是最简单、灵活、强大的页面蒙层组件了!

顾名思义,EasyGuideLayer是用于进行Android页面蒙层引导的组件。

特性

链式调用。调用逻辑清晰直观

支持同时设置多个引导层

支持高亮区域的自定义绘制

支持高亮区域点击监听

支持指定任意View设置蒙层引导

支持进行蒙层展示、隐藏事件监听

支持直接使用drawable创建引导View

示例代码与效果图

1. 对Actiity进行蒙层展示:

CODE:

// 创建引导层展示item

val item = GuideItem.newInstance(findViewById(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 asTextView).text = "此处展示下方的各种蒙层展示效果"

}

EasyGuideLayer. with(activity) // 使用activity实例进行创建。

.addItem(item) // 将引导层添加进来

.setDismissOnClickOutside( true) // 点击外部区域时自动隐藏

.show()

效果图:

2. 展示简单蒙层:无引导View

CODE:

// 提供统一的蒙层实例创建使用

privatefuncreateDefaultGuide()=

EasyGuideLayer.with(anchor) // 指定用于创建蒙层的View

.setBackgroundColor( 0x33000000)

.setOnGuideShownListener { shown: Boolean->

EasyToast.DEFAULT.show( "蒙层已${if (shown) "展示" else "消失"}")

}.setDismissOnClickOutside( true)

...

// 直接创建不添加引导View进行展示

createDefaultGuide().show()

效果图:

3. 展示gravitiy控制效果

CODE:

// 创建位置-文案关系列表。

privatevalgravities = 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 "右下"

)

funshowWithGravity(){

varindex = 0

valitem = GuideItem.newInstance(findViewById(R.id.anchor_center))

// 设置gravity与通用引导View

item.setGravity(gravities[index].first).setLayout(R.layout.guide_text_layout)

item.setOnViewAttachedListener { view, controller ->

(view asTextView).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:

vallayer = createDefaultGuide()

// 背景色调深点便于查看高亮块

layer.setBackgroundColor( 0x66000000)

// 顶部高亮块:使用椭圆形状

valtopItem = GuideItem.newInstance(findViewById(R.id.anchor_top))

.setHighLightShape(GuideItem.SHAPE_OVAL)

.setOnHighLightClickListener { EasyToast.DEFAULT.show() }

// 中间高亮块:使用矩形形状

valcenterItem = GuideItem.newInstance(findViewById(R.id.anchor_center))

.setHighLightShape(GuideItem.SHAPE_RECT)

.setOnHighLightClickListener { EasyToast.DEFAULT.show( "中央高亮区域被点击") }

// 底部高亮块:使用自定义绘制,圆角矩形形状

valbottomItem = GuideItem.newInstance(findViewById(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:

valitem = GuideItem.newInstance(findViewById(R.id.anchor_center))

.setLayout(R.layout.guide_text_layout)

.setOnViewAttachedListener { view, controller ->

(view asTextView).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://link.juejin.im/?target=https%3A%2F%2Fgithub.com%2Fyjfnypeu%2FEasyAndroid

EasyGuideLayer组件地址:

https://link.juejin.im/?target=https%3A%2F%2Fgithub.com%2Fyjfnypeu%2FEasyAndroid%2Fblob%2Fmaster%2Futils%2Fsrc%2Fmain%2Fjava%2Fcom%2Fhaoge%2Feasyandroid%2Feasy%2FEasyGuideLayer.kt

作者:Haoge

链接:https://juejin.im/post/5c049fe951882518805ae469返回搜狐,查看更多

责任编辑:

android播放页蒙层过渡效果,EasyGuideLayer: 这可能是最简单、灵活、强大的页面蒙层组件了!...相关推荐

  1. Android布局管理器-使用TableLayout表格布局管理器实现简单的用户登录页面

    场景 Android布局管理器-使用FrameLayout帧布局管理器显示层叠的正方形以及前景照片: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article ...

  2. 灵活强大的mysql代理层_ProxySQL--灵活强大的MySQL代理层

    本文是我在学习和验证ProxySQL的过程中,从初识(对其机制猜想或凭几次命令的结果臆断其原理),到逐渐深入(模拟各种场景测试.抓包分析.与作者交流)过程中的思路和方法和结论的记录. 笔者初识prox ...

  3. Android多页蒙版遮罩引导功能(源码+解析)

    #Android多页蒙版遮罩引导功能(源码+解析) 需求:博主前段时间做的教育类型APP,需要引导用户(低龄化小朋友),播放器的播放,页面可以左右滑动,以及右上方进入答题卡入口(小朋友都是很聪明的,引 ...

  4. android最优化启动画面,Android启动页黑屏及最优解决方案

    原标题:Android启动页黑屏及最优解决方案 作者:拉丁吴 链接:https://juejin.im/post/58ad90518ac2472a2ad9b684 前言 相信做过Android的朋友都 ...

  5. Android播放器基础封装库PlayerBase

    简述 视频播放是我们开发中比较常见的场景.这两年关于视频方面的热度不断提升,可以说前两年是直播年,今年是小视频年,各种短视频应用铺天盖地.对于视频的业务场景也越来越丰富,功能也越来越多.对于我们开发来 ...

  6. android 播放gif动画效果,android 通过帧动画方式播放Gif动画

    注意:经过本人测试,这个方法很耗内存, 图片一多就崩了.慎用 <1>用工具(photoshop或者FireWorks)将GIF动画图片分解成多个GIF静态图片,然后保存在res\drawa ...

  7. Android 播放opus格式的音频

    文章目录 Opus简介 技术特性 Opus 标识头 Android播放opus 原生播放 三方播放器播放 本地导入ExoPlayer 本地打包opus的so库 调用 Opus简介 Opus是一个有损声 ...

  8. Unity 渲染 Android播放的视频画面

    码字不易,转载请注明出处喔 https://blog.csdn.net/newchenxf/article/details/119565585 1. 前言 Unity本身可以直接播放本地视频或网络视频 ...

  9. android自适应拉伸图片,Android 启动页-解决图片被拉伸和压缩问题,适配虚拟导航栏...

    Android 启动页设置非常简单 //styles.xml 设置主题 @drawable/bg_splash true //activity使用主题,这时点击app图标,就会显示@drawable/ ...

最新文章

  1. 【权游相关】龙的简史 | 混乱博物馆
  2. matlab修改矩阵元素,怎么修改矩阵中的某些元素 或者简单点说保留矩阵中的元素...
  3. 2015年创业中遇到的技术问题:41-50
  4. MATLAB显示错误使用untitled,新手,用gui界面画李萨如图,出错,求解答
  5. 数据结构中的树 --- 红黑树
  6. 38 NoSQL-memcached
  7. H3C ACL 访问控制
  8. MATLAB命令窗常用命令
  9. Python小程序(3)--BMR(基础代谢率)计算器
  10. JavaWeb-HTML
  11. kali mysql 卸载,linux mysql卸载命令
  12. Hedgehog 信号通路与癌症
  13. 图片加载之前显示 加载中或者加载中图片
  14. socketDemo套接字
  15. 计算机课情感态度与价值观,浅谈信息技术课中情感态度价值观的培养
  16. python万年历函数输入某一年某一月_Python自定义函数计算给定日期是该年第几天的方法示例...
  17. Python:类(class)的变量声明
  18. 输入a,b,c三个整数求其中最大值(C语言实现)
  19. 退了IBM对日软件外包实训有些天了
  20. Cypher语句总结

热门文章

  1. Focal Loss升级:让Focal Loss动态化,类别极端不平衡也可以轻松解决
  2. ‘numpy.float64‘ object cannot be interpreted as an integer
  3. 大幅涨点!孙剑团队提出新激活层ACON和轻量级网络TFNet
  4. opencv 读取位置 0xFFFFFFFFFFFFFFFF 时发生访问冲突
  5. python读取红外图
  6. PyQt5之QColor学习
  7. hi3559 目标检测
  8. F-Strings:超级好用的Python格式字符串!!
  9. shuffleNetv2 测试
  10. Go []byte to a C *char