你是不是還在為每次引導(dǎo)圖布局嵌入頁面開發(fā)中而發(fā)愁
你是不是還在為每次引導(dǎo)圖各種高亮的形狀以及位置計算而糾結(jié)。
現(xiàn)在螟碎,只需一行代碼加兩個切圖就能為你完成引導(dǎo)圖的顯示
同時與布局完全解耦 , 無需繁瑣的位置計算, 自動托管版本管理侣夷。
附上庫鏈接硝逢。
點我看源碼
使用姿勢
調(diào)用方式:
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();
說一下最主要的技術(shù)點
- 如何與業(yè)務(wù)布局完全解耦
這里使用的方式是
View content =activity
.getWindow()
.getDecorView()
.findViewById(android.R.id.content);
DecorView 為頁面的頂層View的妖,內(nèi)部由title view 和 content view 組成矢洲, app 業(yè)務(wù)方 布局存在于 content view 中璧眠, 于是通過 content.addView 的方式可以實現(xiàn)通用的添加引導(dǎo)圖。
- 如何實現(xiàn)自定義高亮區(qū)域繪制读虏。
這里綜合考慮了自己實現(xiàn)繪圖接口代碼繪圖 和通過切圖繪制的成本责静,使用了更便捷的切圖的形式。
在draw 的同時盖桥,通過paint 的 setXfermode 方法修改畫筆模式灾螃,
將高亮區(qū)域切圖bitmap通過:
mBgCanvas.drawBitmap(hollowBitmap,
hollowX + xOffset, hollowY + yOffset, mMainPaint);
方式實現(xiàn)。
- 如何通過目標(biāo)view 的引用自動定位高量區(qū)域揩徊,且與view 的展示周期一致腰鬼。
這里主要使用的是getLocationOnScreen方法換算出view 的中心點,在draw 的過程中塑荒,計算鏤空高亮區(qū)域中心點和view 的中心點重合熄赡。
關(guān)于view 的展示周期控制,主要通過 ViewCompat.isAttachToWindow 和 ViewTreeObserver 實現(xiàn)監(jiān)聽和控制齿税。