热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

一分钟实现Android遮罩引导视图

本文通过一分钟的时间教大家实现Android遮罩引导视图,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

一分钟实现Android遮罩引导视图,供大家参考,具体内容如下

先看一下效果图

主角GuideView登场!

GuideView是一种基于DialogFragment实现的引导遮罩浮层视图的轻量级解决方案,它具备以下的特性:

  • 响应导航按钮的动作(因为引导浮层本质是一个dialog);
  • 链式引导层,支持设定一组的引导遮罩视图,通过点击切换下一个试图,快读与业务进行解藕;
  • 自动绘制半透明浮层、透明核心区以及确保目标视图和引导视图的位置。

实现说明

页面的结构如下图所示:

核心类

GuideViewBundle

引导视图的配置项类,每一页引导视图对应一个配置项。在GuideView内部通过这个配置项去构造GuideView的实例,并通过GuideViewFragment显示在界面上。

其中的属性都通过构造器的模式,通过静态内部类Builder进行构建,属性说明如下:

targetView

引导视图需要显示附着的目标视图

hintView

引导视图(不包含半透明浮层以及透明焦点区)

transparentSpaceXXX

默认的情况下,透明焦点区的大小跟目标视图的大小保持一致,如果需要加大透明区域的大小,可以通过设置这组属性,指定上下左右的额外的空白区域

hintViewMarginXXX

引导视图(hintView)相对于目标视图(targetView)的边距

hasTransparentLayer

是否显示透明焦点区域,默认显示。可以选择不绘制透明焦点区域而只有半透明的浮层

hintViewDirection

引导视图(hintView)相对于目标视图(targetView)的位置方向,目前可以定义上(上方左对齐)、下(下方左对齐)、左(左方上对齐)、右(右方上对齐)四个方向。如果需要在位置之余有不一样的对齐效果,可以使用hintViewMarginXXX属性

outlineType

透明焦点区的轮廓类型,有圆形(椭圆)轮廓和方形轮廓两种

maskColor

半透明遮罩浮层的颜色

isDismissOnClicked

全局点击可以关闭引导视图,默认为true。如果设置false,则需要手动设置点击hintView的特定位置关闭视图

GuideView

界面实际展示的视图对象,根据GuideViewBundle设置的属性,由GuideViewFragment创建并添加到齐视图容器中,对外部业务完全透明无感知到一个类

GuideViewFragment

实际显示引导视图的弹窗。其内部加载了一个FrameLayout容器,通过在容器中添加GuideView的实例实现显示引导视图层。一个GuideViewFragment可以设定一组引导视图,完成一组引导序列。请使用其静态内部类Builder构建其实例,并使用Builder#addGuidViewBundle(bundle)方法添加引导视图的配置项。

如果需要自定义点击关闭的动作(GuideViewBundle.Builder#setDismissOnClicked(false)的情况下),可以使用下面的方法

void onNext()

如果还存在没有显示的引导视图,这个方法会继续显示下一张,否则会关闭弹窗

添加依赖

1.在根目录的build.gradle文件中添加jitpack仓库

allprojects {
   repositories {
     ...
     maven { url 'https://jitpack.io' }
   }
}

2.添加GuideView依赖

dependencies {
  compile 'com.github.easilycoder:GuideView:0.0.1'
}

使用示例

GuideViewFragment.Builder()
          .addGuidViewBundle(GuideViewBundle.Builder()
              .setTargetView(tvContent)
              .setHintView(hintViewLeft)
              .setDismissOnClicked(false)
              .setHintViewMargin(0, -160, 0, 0)
              .setTransparentSpace(space, space, space, space)
              .setOutlineType(TYPE_RECT)
              .setHintViewParams(params)
              .setHintViewDirection(LEFT).build())
          .addGuidViewBundle(GuideViewBundle.Builder()
              .setTargetView(tvContent)
              .setOutlineType(TYPE_OVAL)
              .setHintView(hintViewTop)
              .setDismissOnClicked(false)
              .setHintViewParams(params)
              .setHintViewMargin(-dp2px(this, 55f), 0, 0, 0)
              .setTransparentSpace(space, space, space, space)
              .setHintViewDirection(TOP)
              .build())
          .addGuidViewBundle(GuideViewBundle.Builder()
              .setTargetView(tvContent)
              .setOutlineType(TYPE_OVAL)
              .setHintView(hintViewRight)
              .setDismissOnClicked(false)
              .setHintViewParams(params)
              .setHintViewMargin(0, -160, 0, 0)
              .setTransparentSpace(space, space, space, space)
              .setHintViewDirection(RIGHT)
              .build())
          .addGuidViewBundle(GuideViewBundle.Builder()
              .setTargetView(tvContent)
              .setOutlineType(TYPE_OVAL)
              .setHintViewParams(params)
              .setHintViewMargin(-dp2px(this, 55f), 0, 0, 0)
              .setHintView(hintViewBottom)
              .setTransparentSpace(space, space, space, space)
              .setHintViewDirection(BOTTOM)
              .build())
          .setCancelable(false)
          .build().show(supportFragmentManager, "hit")

具体实例以及设计实现可以参考我的GitHub仓库:GuideView

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • 本文将指导您如何在Docker环境中高效地搜索、下载Redis镜像,并通过指定或不指定配置文件的方式启动Redis容器。同时,还将介绍如何使用redis-cli工具连接到您的Redis实例。 ... [详细]
  • LCUI 2.1.0 版本现已推出,这是一个用 C 语言编写的图形用户界面开发库,适合创建轻量级的桌面应用程序。此次更新包括多项修复和功能增强,并正式宣布将启动 Android 支持的开发计划。 ... [详细]
  • 本文介绍了在Android项目中实现时间轴效果的方法,通过自定义ListView的Item布局和适配器逻辑,实现了动态显示和隐藏时间标签的功能。文中详细描述了布局文件、适配器代码以及时间格式化工具类的具体实现。 ... [详细]
  • 全能终端工具推荐:高效、免费、易用
    介绍一款备受好评的全能型终端工具——MobaXterm,它不仅功能强大,而且完全免费,适合各类用户使用。 ... [详细]
  • 任务,栈, ... [详细]
  • ServletContext接口在Java Web开发中扮演着重要角色,它提供了一种方式来获取关于整个Web应用程序的信息。通过ServletContext,开发者可以访问初始化参数、共享数据以及应用资源。 ... [详细]
  • 使用Jenkins构建Java项目实践指南
    本指南详细介绍了如何使用Jenkins构建Java项目,包括环境搭建、工具配置以及项目构建的具体步骤。 ... [详细]
  • Spring Cloud Config 使用 Vault 作为配置存储
    本文探讨了如何在Spring Cloud Config中集成HashiCorp Vault作为配置存储解决方案,基于Spring Cloud Hoxton.RELEASE及Spring Boot 2.2.1.RELEASE版本。文章还提供了详细的配置示例和实践建议。 ... [详细]
  • matlab gamma函数_MATLAB做晶体结构图(固体物理)
    写在前面最近在复习考研复试《固体物理》这一门课,去年学的内容已经忘干净了,所以就翻开前几页。突然看到了面心立方和体心立方结构图,想到了去年 ... [详细]
  • Ubuntu GamePack:专为游戏爱好者打造的Linux发行版
    随着Linux系统在游戏领域的应用越来越广泛,许多Linux用户开始寻求在自己的系统上畅玩游戏的方法。UALinux,一家致力于推广GNU/Linux使用的乌克兰公司,推出了基于Ubuntu 16.04的Ubuntu GamePack,旨在为Linux用户提供一个游戏友好型的操作环境。 ... [详细]
  • 本文详细介绍了如何正确安装Java EE SDK,并解决在安装过程中可能遇到的问题,特别是关于servlet代码在Apache Tomcat 10中无法运行的情况。 ... [详细]
  • OBS (Open Broadcaster Software) 架构解析
    本文介绍 OBS(Open Broadcaster Software),一款专为直播设计的开源软件。文章将详细探讨其技术架构、核心组件及其开发环境要求。 ... [详细]
  • 本文探讨如何利用Java反射技术来模拟Webwork框架中的URL解析过程。通过这一实践,读者可以更好地理解Webwork及其后续版本Struts2的工作原理,尤其是它们在MVC架构下的角色。 ... [详细]
  • 本文探讨了Web开发与游戏开发之间的主要区别,旨在帮助开发者更好地理解两种开发领域的特性和需求。文章基于作者的实际经验和网络资料整理而成。 ... [详细]
  • 利用RabbitMQ实现高效延迟任务处理
    本文详细探讨了如何利用RabbitMQ实现延迟任务,包括其应用场景、实现原理、系统设计以及具体的Spring Boot实现方式。 ... [详细]
author-avatar
牛粪不插花88
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有