Behavior有好多種,有APPBarLayout的Behavior,有FloatingActionButton的Behavior,還有CoordinatorLayout的Behavior
Behavior是什么呢?
打開一下知乎,首頁上拉后,actionBar先上滑隱藏,繼續上拉,地下的tab欄下滑隱藏,當你停止上拉,而是下拉時,兩個都又出現
原諒我不造怎么傳動圖。。。學會了再來傳圖。。。。
神奇的Behavior依據類似觀察者的模式實現兩個或者多個控件的聯動聯系
需要說明的是,要能實現Behavior的功能,控件的父控件應該是coordinatorLayout,只有他才能傳遞事件,才能回調注冊中的方法
現在說一下CoordinatorLayout的Behavior
我們分為兩種:
A:一個View對于另一個View注冊的監聽
B:一個View對CoordinatorLayout注冊的滑動監聽
首先來講一下A:
我們這邊主要是通過自定義Behavior的方式來實現,所以先看一下代碼
需要關心的就是兩個方法,一個layoutDependsOn,是綁定需要關心的View,這邊返回的就是關心的條件,CoordinatorLayout遍歷所有的childView,滿足條件的就會建立監控關系
另一個方法onDependentViewChanged,就是建立關系的兩個Veiw,被監控的發生變化就會回調此方法,此方法三個參數,第二個是跟著變化的Veiw,第三個就是需要監控的View,我們這邊做的就是監控的View跟著被監控的一起上下移動
好了,這個Behavior就ok了,現在我們去做一下布局
在布局里面加一個CoordinatorLayout,然后在里面加兩個Button
在監控的button里面添加behavior屬性
app:layout_behavior="com.ddstar.customcomponent.CusBehaivor"
然后就做好了監控關系
如果確定依賴監聽關系的條件是只要CoordinatorLayout里面的Button發生了變化就會有反應,所以CoordinatorLayout會遍歷childView,只要是Button發生移動,“跟屁蟲”這個Button就會跟著上下移動
然后就動了-------------------
接下來說一下B:
這個稍微復雜一些,我們主要關注的是三個方法
onStartNestedScroll
開始滾動前,設置我們要關心的條件
這邊設置的條件是豎直方向的滾動
onNestedScroll
滾動時的狀態變化,被監控的控件發生Lee變化,就可以拿到相對應的變化參數進行設置
onNestedFling
此方法是當你滑動屏幕后手離開屏幕,整個頁面還是在滑動,此方法就是當此情況發生時回調的方法
所以知道回調方法何時回調,實現起來就容易了
需要注意的是:
要讓以上方法能夠回調,所關心的能滑動的控件應該實現NestedScrollingChild接口,像一般的ListView/ScrollView是沒辦法的,所以Recycleview你值得擁有
我這邊實現的是簡單地功能:
底部一個控件,Recycleview上拉時隱藏,下拉又顯示
數學不太好,這個方法好久才看懂
那就這樣
源碼:
https://github.com/DDstar/CoordinatorLayoutBehaviorDemo.git