ScrollView中懸停效果的實(shí)現(xiàn)

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)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容