序
最近聊到一些朋友待业的消息 (资金链断的 、裁员的 、公司解散的)导致待业状态 ,似乎很少有主动辞职了 。年初还能看一些公众号文章说是环境不好的相关话题 ,现在好像是沉静下来了但是几乎都知道外面天气冷 。最近收到类似的消息多了之后 ,结果昨天晚上做梦我去面试了 ,最玄乎的是被面试官给虐成菜但是结果成了 ,面试官看着我在微笑。。。。我心里想(美得你)。
新手引导库顾名思义就是在第一次使用 APP 的一些功能指引 ,但是这一版本需要加在了改动的班级详情页面 。按我的技术思维来说有点不太合理 ,但是产品可能考虑到自己新改版功能的易用性和新旧体验差的问题 。俺也不敢问做就行了 。然后就在群里发了一句 " 老哥们 ,我需要新手引导库 " ---- 嗖嗖嗖 给了一堆 。哈哈哈哈哈 ,简单记录一下 。
上 UI 图
需求:引导 1 、引导 2 ... (按照数据情况进行显示) 哈哈哈 ,我内心在笑 。。。
我使用的是 https://github.com/binIoter/GuideView 这个项目 。
原因
最近一次提交代码日期可以接受 ,这一点我想简单说一下关于 Github 上所有的库 ,在选择的时候尽量看一下最近的提交记录 ,就比如买一些东西的时候可能会看一下保质期 。表述的实现逻辑很清晰并且也可以接受 ,可以根据 View 的位置自己去定位显示高亮 ,在里面的实现代码中就简单的几个类 ,总体来说简单方便而且扩展性强。我并没有直接按照 README.md 上的操作引入依赖使用这个库 ,clone 运行之后发现代码挺简洁的 ,简洁的用 moudle 去引入他就是一个浪费 ,直接在项目建个包放进去使用就 OK 了 ,无缝衔接 。
实现逻辑
可以用一句话概括 GuideView " 为一个 Activity 里的任何一个 View 控件创建一个遮罩式的引导页 " 。
1. 首先该库适用于 Xml 里面的所有控件 View ,使用 ID 去进行操作
2. 通过 View 去计算它在屏幕上的区域 Rect
/**
* Rect在屏幕上去掉状态栏高度的绝对位置
*/
static Rect getViewAbsRect(View view, int parentX, int parentY) {
int[] loc = new int[2];
view.getLocationInWindow(loc);
Rect rect = new Rect();
rect.set(loc[0], loc[1], loc[0] + view.getMeasuredWidth(), loc[1] + view.getMeasuredHeight());
rect.offset(-parentX, -parentY);
return rect;
}
3. 绘制一个覆盖整个 Activity 的遮层 ,可以自定义蒙板的颜色和透明度 ,目标 VIew 不会被绘制从而是实现高亮 。(这一点我是很认可的 ,比较喜欢这个逻辑)
4. 接下来是相对于这个 Rect 区域绘制一些图片和文字 ,把这些东西抽象成一个接口 Compoent 。
PS:顶层实现漏记是根据一些参数生成的自定义 View MaskView 并且添加到 Activity 的DecorView 中作为子 View 。
PS:还有一个小点就是这个是依赖于 Activity 的DecorVIew ,所以如果是在 Fragment 中使用在位置或者复用的时候会有小瑕疵 。整体问题不大 。