专栏首页飞雪无情的博客android覆盖式引导

android覆盖式引导

我们在开发产品的时候,每次发版可能会有一些新的功能需要引导用户使用,以前大部分都是使用截图,然后让设计师把引导的问题修饰好放到图上,现在这张图片就是引导图片,我们只需要用这张图片放到界面上,这样基本上就可以满足引导的作用.

但是这样的情况有个缺点,那就是,手机的分辨率太多,我们不可能每个分辨率都做一张图片,这样图片就会变形,有些引导操作的位置可能就不准确了,而且使用绘图的方式绘制在图片上的文字也会模糊不清.

基于如上的方式,我们可以使用另外一种方式来做引导,这样方式就是使用覆盖式的方式,主要的实现方式是

  1. 使用一个透明并且全屏的PopuWindow,这样我们就有一个可以显示向导
  2. 获取需要引导的View元素在屏幕上的位置,这样我们就可以准确的给这个View绘制引导信息
  3. 然后让PopuWindow显示出来,这样就可以看到我们的引导正好指向需要引导的位置

可以看下如下图的效果,这是实现的示例图.

可以看到,“查看帮助,了解更多”正好指向我们?图片操作按钮,位置很准确,文字也很清晰,并且这种方式实现的在所有分辨率上的手机上位置都是准确的,因为我们准确的获得了目标View的位置.

从上面的描述和效果图中我们也看到了一些关键点,比如全屏背景透明的PopuWindow,这个相信比较简单,宽高FILL_PARENT,背景设置为透明背景就好了.第二个就是目标View的位置,这个是比较难的,一般的引导我们都会在用户打开界面的时候显示,按说在Activity onCreate方法里调用最合适,但是这个时候我们的ContentVIew还没有测量绘制,所以我们根本不知道目标的位置.另外一个办法就是监听View层级的变化.

ViewTreeObserver observer view.getViewTreeObserver();
observer.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener(){
    public void onGlobalLayout(){
    //开始显示向导
  }
});

注册监听后,就可以在收到通知后进行显示向导,这时候每个View都已经测量布局好,可以获得他们的准确位置,获取View在屏幕上的位置通过public void getLocationOnScreen (int[] location)获取其在屏幕上的位置.

获取到这些VIew的位置后,就需要显示我们的引导了,PopuWindow可以设置一个ContentView,我们可以AbsoluteLayout作为ContentView,在这里绝对布局是最好的选择,因为我们获取的目标View的位置都是绝对的,所以使用绝对位置,通过x,y坐标就可以确定引导的位置.

接下来的事情就简单了,我们只需要显示PopuWindow就可以啦,然后控制好事件,比如用户点击的时候收起该引导,让用户继续正常使用产品.引导不能无休止的显示,我们可以通过配置来控制引导是否显示以及显示的次数等等.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Android Gradle实用技巧(二) | 自动生成版本信息

    每一个App都会有一个版本号,这样用户就知道自己安装的应用是哪个版本,是不是最新版,有了问题,也可以找客服报上自己的版本,让客服有针对性的帮用户解决问题。

    飞雪无情
  • Go语言经典库使用分析(七)| 高性能可扩展 HTTP 路由 httprouter

    Go语言(golang)的一个很大的优势,就是很容易的开发出网络后台服务,而且性能快,效率高。在开发后端HTTP网络应用服务的时候,我们需要处理很多HTTP的请...

    飞雪无情
  • Golang Gin 实战(十一)| HTML模板渲染

    终于又到一个重头戏了。在整个服务端开发中,一个是API,一个就是网页,当前的API大部分都是通过JSON提供了,而网页就是通过HTML提供了。所以对于这么大的需...

    飞雪无情
  • PE知识复习之PE的节表

    节表重要成员都标红了.我们知道.PE文件有两种状态.一种是内存状态.一种则是文件状态.

    IBinary
  • 对单体系统优缺点评判到位:拆分Shopify单体工程的经验分享

    Shopify是现存最大的Ruby on Rails代码库之一。它已被超过一千名开发人员使用了十多年。它封装了来自计费商家,管理第三方开发者应用程序,更新产品,...

    lyb-geek
  • 分布式网络文件系统--MooseFS

    MooseFS是一个具备冗余容错功能的分布式网络文件系统,它将数据分别存放在多个物理服务器或单独磁盘或分区上,确保一份数据有多个备份副本。对于访问的客户端或者用...

    yaohong
  • [随缘一题]螺旋矩阵

    呼延十
  • Linux下用来获取各种系统信息的C++类

    下面是头文件内容,代码是mooon的一部分,对应的CPP文件请直接浏览:http://code.google.com/p/mooon/source/browse...

    一见
  • 复活者谷歌:死去的外公仍活在谷歌的数字世界里,即使他从未使用过互联网

    Joe的外公已经去世,而且一辈子与网络隔绝,然而Joe却惊奇地发现,Chrome浏览器记录了他外公的名字和地址。更神奇的是,甚至连他自己都不曾知道他外公的全名。

    大数据文摘
  • IF:10.465 | 苏铁类植物微生物相的扩增子16S分析

    植物微生物相被称为植物的第二或者扩展基因组,能给宿主提供丰富的氮磷等营养元素,促进植物生长,提高抗性,对植物适应不良环境具有重要贡献。

    生信宝典

扫码关注云+社区

领取腾讯云代金券