你是不是還在為每次引導(dǎo)圖布局嵌入頁面開發(fā)中而發(fā)愁
你是不是還在為每次引導(dǎo)圖各種高亮的形狀以及位置計算而糾結(jié)。
現(xiàn)在,只需一行代碼加兩個切圖就能為你完成引導(dǎo)圖的顯示
同時與布局完全解耦 , 無需繁瑣的位置計算, 自動托管版本管理。
附上庫鏈接。
點(diǎn)我看源碼
使用姿勢
調(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ù)點(diǎn)
- 如何與業(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 的方式可以實(shí)現(xiàn)通用的添加引導(dǎo)圖。
- 如何實(shí)現(xiàn)自定義高亮區(qū)域繪制。
這里綜合考慮了自己實(shí)現(xiàn)繪圖接口代碼繪圖 和通過切圖繪制的成本,使用了更便捷的切圖的形式。
在draw 的同時,通過paint 的 setXfermode 方法修改畫筆模式,
將高亮區(qū)域切圖bitmap通過:
mBgCanvas.drawBitmap(hollowBitmap,
hollowX + xOffset, hollowY + yOffset, mMainPaint);
方式實(shí)現(xiàn)。
- 如何通過目標(biāo)view 的引用自動定位高量區(qū)域,且與view 的展示周期一致。
這里主要使用的是getLocationOnScreen方法換算出view 的中心點(diǎn),在draw 的過程中,計算鏤空高亮區(qū)域中心點(diǎn)和view 的中心點(diǎn)重合。
關(guān)于view 的展示周期控制,主要通過 ViewCompat.isAttachToWindow 和 ViewTreeObserver 實(shí)現(xiàn)監(jiān)聽和控制。