android覆盖式引导
我们在开发产品的时候,每次发版可能会有一些新的功能需要引导用户使用,以前大部分都是使用截图,然后让设计师把引导的问题修饰好放到图上,现在这张图片就是引导图片,我们只需要用这张图片放到界面上,这样基本上就可以满足引导的作用.
但是这样的情况有个缺点,那就是,手机的分辨率太多,我们不可能每个分辨率都做一张图片,这样图片就会变形,有些引导操作的位置可能就不准确了,而且使用绘图的方式绘制在图片上的文字也会模糊不清.
基于如上的方式,我们可以使用另外一种方式来做引导,这样方式就是使用覆盖式的方式,主要的实现方式是
- 使用一个透明并且全屏的PopuWindow,这样我们就有一个可以显示向导
- 获取需要引导的View元素在屏幕上的位置,这样我们就可以准确的给这个View绘制引导信息
- 然后让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就可以啦,然后控制好事件,比如用户点击的时候收起该引导,让用户继续正常使用产品.引导不能无休止的显示,我们可以通过配置来控制引导是否显示以及显示的次数等等.
- 美团点评境外度假团队前端项目开发实践总结
- 在jfinal中使用druid,并配置查看权限
- java中遇到过的String的一些特性
- Kaggle案例——使用scikit-learn解决DigitRecognition问题
- 基于Kaggle数据的词袋模型文本分类教程
- javascript中遇到的字符串对象处理
- 传统企业站开发 - 页面布局
- AngularJS中使用service,并同步数据
- 2016.05 第四周 群问题分享
- angularjs中 *.min.js.map 404的问题
- Git与通过Git添加提交文件
- Facebook社交网络R语言分析
- 初次使用AngularJS中的ng-view,路由控制
- Android Hook技术防范漫谈
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 学会这15点,让你分分钟拿下Redis数据库
- 服务器性能指标——负载(Load)分析及问题排查
- 这20个Docker Command,有几个是你会的?
- Redis 备份、容灾及高可用实战
- 容器技术|Docker三剑客之Compose
- ProxySQL+Mysql实现数据库读写分离实战
- 打造高逼格、可视化的Docker容器监控系统平台
- 企业面试题|最常问的MySQL面试题集合(一)
- 深入理解消息中间件技术之RabbitMQ服务
- 手把手从0开始教你搭建Jumpserver,为服务器安全保驾护航!
- 企业面试题|最常问的MySQL面试题集合(二)
- 值得一看的35个Redis面试题总结
- 容器技术|Docker三剑客之docker-machine
- 企业面试题|最常问的MySQL面试题集合(三)
- 「微服务架构」API版本控制最佳实践介绍