緊接上篇文章(Android實(shí)現(xiàn)Scroll(滑動(dòng))的方法(—))繼續(xù)說(shuō)一下實(shí)現(xiàn)滑動(dòng)的方法。
⑥ViewDragHelper:支持著DrawerLayout和SlidingPaneLayout兩個(gè)布局來(lái)實(shí)現(xiàn)側(cè)邊欄滑動(dòng)效果界睁。
案例:QQ滑動(dòng)側(cè)邊欄(分析):
a.初始化ViewDragHelper:其通常定義在一個(gè)ViewGroup的內(nèi)部米丘,并通過(guò)其靜態(tài)工廠方法進(jìn)行初始化腿椎。
b.攔截事件:將事件傳遞給ViewDragHelper進(jìn)行處理。
c.處理computeScroll():ViewDragHelper內(nèi)部也是通過(guò)Scroller實(shí)現(xiàn)平滑移動(dòng)。
d.處理回調(diào)Callback,在創(chuàng)建Callback時(shí)础淤,IDE會(huì)重寫(xiě)tryCaptureView()方法,通過(guò)該方法哨苛,可以指定參數(shù)parentView中子View被移動(dòng)鸽凶。
e.重寫(xiě)clampViewPositionVertical()、clampViewPositionHorizontal()方法建峭。方法參數(shù):int top(表示在垂直方向上child移動(dòng)的距離)玻侥,int dy(表示比較前一次的增量)
f.實(shí)現(xiàn)當(dāng)手機(jī)離開(kāi)屏幕后實(shí)現(xiàn)的操作:重寫(xiě)ViewDragHelper.Callback中系統(tǒng)提供的onViewReleased()方法。
g.自定義ViewGroup亿蒸,并在onFinishInflate()方法中按順序?qū)⒆覸iew分別定義成MenuView和MainView使碾,并在onSizeChanged()方法中獲取View的寬度。