認識Behavior
使用CoordinatorLayout時,會在xml文件中用它作為根布局顽染,并給相應(yīng)的子View添加一個類似app:layout_behavior="@string/appbar_scrolling_view_behavior"的屬性,當然屬性值也可以是其它的。進一步可以發(fā)現(xiàn)@string/appbar_scrolling_view_behavior的值是android.support.design.widget.AppBarLayout$ScrollingViewBehavior官卡,不就是support包下一個類的路徑嘛!玄機就在這里醋虏,通過CoordinatorLayout之所以可以實現(xiàn)炫酷的交互效果寻咒,Behavior功不可沒。既然如此颈嚼,我們也可以自定義Behavior毛秘,來定制我們想要的效果。
自定義Behavior
可以選擇重寫以下的幾個方法有:
-
onInterceptTouchEvent()
:是否攔截觸摸事件 -
onTouchEvent()
:處理觸摸事件 -
layoutDependsOn()
:確定使用Behavior
的View
要依賴的View
的類型 -
onDependentViewChanged()
:當被依賴的View
狀態(tài)改變時回調(diào) -
onDependentViewRemoved()
:當被依賴的View
移除時回調(diào) -
onMeasureChild()
:測量使用Behavior
的View
尺寸 -
onLayoutChild()
:確定使用Behavior
的View
位置 -
onStartNestedScroll()
:嵌套滑動開始(ACTION_DOWN
),確定Behavior
是否要監(jiān)聽此次事件 -
onStopNestedScroll()
:嵌套滑動結(jié)束(ACTION_UP
或ACTION_CANCEL
) -
onNestedScroll()
:嵌套滑動進行中叫挟,要監(jiān)聽的子View
的滑動事件已經(jīng)被消費 -
onNestedPreScroll()
:嵌套滑動進行中艰匙,要監(jiān)聽的子View
將要滑動,滑動事件即將被消費(但最終被誰消費抹恳,可以通過代碼控制) -
onNestedFling()
:要監(jiān)聽的子View
在快速滑動中 -
onNestedPreFling()
:要監(jiān)聽的子View
即將快速滑動
當你在onStartNestedScroll()中返回了true之后员凝,嵌套滾動進入兩個階段:
onNestedPreScroll() 會在scrolling View獲得滾動事件前調(diào)用,它允許你消費部分或者全部的事件信息奋献。
onNestedScroll() 會在scrolling View做完滾動后調(diào)用健霹,通過回調(diào)可以知道scrolling view滾動了多少和它沒有消耗的滾動事件。