StickyScrollView git@github.com:emilsjolander/StickyScrollViewItems.git
這個控件是通過繼承ScrollView 來重寫部分方法實(shí)現(xiàn)對 設(shè)置了 sticky Tag 的子view 懸停操作的

布局中的用法
效果
我們看方法列表

image.png
一個開始懸停 方法 和 停止懸停方法應(yīng)該就是核心了 。

image.png
兩個方法的調(diào)用位置,基本為 doTheStickyThing()

image.png
首先看 for 中

image.png
可以看到 這是對 兩個 view 的查找操作
viewThatShouldStick 與 approachingView
我們循環(huán)的集合為 初始化時 獲取的 所有標(biāo)有懸停標(biāo)記的 view
接下來我們先暫時跳過查找的細(xì)節(jié),當(dāng)我們找到了那個需要被懸停的 view 時
也就是

image.png
由于本次流程中 獲取了viewThatShouldStick所以 approachingView 應(yīng)該是為空的
所以獲取的 stickyViewTopOffset=0;
接下來執(zhí)行startStickingView()
根據(jù)設(shè)置的 tag 來執(zhí)行相應(yīng)操作
最后執(zhí)行了 invalidateRunnable

image.png
postDelayed(this,16)每16ms 重繪一次?
通知 scrollview 重新繪制 懸停區(qū)域
然后 是繪制過程
dispatchDraw()
中 對原有布局進(jìn)行默認(rèn)繪制后 在對當(dāng)前 currentStickingView 進(jìn)行再次繪制
繪制區(qū)域?yàn)閼彝^(qū)域內(nèi)