你是不是还在为每次引导图布局嵌入页面开发中而发愁
你是不是还在为每次引导图各种高亮的形状以及位置计算而纠结。
现在,只需一行代码加两个切图就能为你完成引导图的显示
同时与布局完全解耦 , 无需繁琐的位置计算, 自动托管版本管理。
附上库链接。
点我看源码
使用姿势
调用方式:
GuideGenerator.init((Activity) getContext())
.setHollowImageRes(R.drawable.u_biz_guide_home_page_hollow)
.setTipViewRes(R.drawable.u_biz_guide_home_page_tip, GuideView.Position.TOP, 10, 0, 0, 0)
.setTargetVersion(MGInfo.getVersionName(), NewsFragment.class.getSimpleName())
.setTargetView(view)
.show();
说一下最主要的技术点
- 如何与业务布局完全解耦
这里使用的方式是
View content =activity
.getWindow()
.getDecorView()
.findViewById(android.R.id.content);
DecorView 为页面的顶层View,内部由title view 和 content view 组成, app 业务方 布局存在于 content view 中, 于是通过 content.addView 的方式可以实现通用的添加引导图。
- 如何实现自定义高亮区域绘制。
这里综合考虑了自己实现绘图接口代码绘图 和通过切图绘制的成本,使用了更便捷的切图的形式。
在draw 的同时,通过paint 的 setXfermode 方法修改画笔模式,
将高亮区域切图bitmap通过:
mBgCanvas.drawBitmap(hollowBitmap,
hollowX + xOffset, hollowY + yOffset, mMainPaint);
方式实现。
- 如何通过目标view 的引用自动定位高量区域,且与view 的展示周期一致。
这里主要使用的是getLocationOnScreen方法换算出view 的中心点,在draw 的过程中,计算镂空高亮区域中心点和view 的中心点重合。
关于view 的展示周期控制,主要通过 ViewCompat.isAttachToWindow 和 ViewTreeObserver 实现监听和控制。