CoordinatorLayout
coordinatorLayout (協(xié)調(diào)布局)其實(shí)就是將其下的所有子View都抽象成: 互相依賴(depends)的關(guān)系. 因此某個(gè)view可以基于另一個(gè)view來定位,
這樣抽象的好處更強(qiáng)大的地方在于:
每一個(gè)view的所有屬性, 坐標(biāo), 樣式, 狀態(tài)等一切都可以依賴于另一個(gè)view, 因此使得parentView和所有childView之間都可以互相聯(lián)動(dòng)起來.
想象一下, 不僅僅是定位, 所有可以設(shè)置在View上面的屬性都可以依賴于另一個(gè)view的變化而變化, 某一個(gè)View可以跟隨另一個(gè)View一起滾動(dòng), 某一個(gè)View可以跟隨另一個(gè)View的狀態(tài)改變而改變, 性能非常的強(qiáng)大;
CoordinatorLayout的Behavior
Behavior是Android新出的Design庫(kù)里新增的布局概念。Behavior只有是CoordinatorLayout的直接子View才有意義??梢詾槿魏蜼iew添加一個(gè)Behavior。
Behavior是一系列回調(diào)。讓你有機(jī)會(huì)以非侵入的為View添加動(dòng)態(tài)的依賴布局,和處理父布局(CoordinatorLayout)滑動(dòng)手勢(shì)的機(jī)會(huì)。
不過官方只有少數(shù)幾個(gè)Behavior的例子。并且實(shí)現(xiàn)類也很少;默認(rèn)也只有幾種實(shí)現(xiàn),有的復(fù)雜的需求就需要自己去實(shí)現(xiàn)自定義的Behavior
先說一下這個(gè)屬性 app:layout_scrollFlags
1) scroll:值設(shè)為scroll的View會(huì)跟隨滾動(dòng)事件一起發(fā)生移動(dòng)。
2) enterAlways:值設(shè)為enterAlways的View,當(dāng)ScrollView往下滾動(dòng)時(shí),該View會(huì)直接往下滾動(dòng)。而不用考慮ScrollView是否在滾動(dòng)。
3) exitUntilCollapsed:值設(shè)為exitUntilCollapsed的View,當(dāng)這個(gè)View要往上逐漸“消逝”時(shí),會(huì)一直往上滑動(dòng),直到剩下的的高度達(dá)到它的最小高度后,再響應(yīng)ScrollView的內(nèi)部滑動(dòng)事件。
4) enterAlwaysCollapsed:是enterAlways的附加選項(xiàng),一般跟enterAlways一起使用,它是指,View在往下“出現(xiàn)”的時(shí)候,首先是enterAlways效果,當(dāng)View的高度達(dá)到最小高度時(shí),View就暫時(shí)不去往下滾動(dòng),直到ScrollView滑動(dòng)到頂部不再滑動(dòng)時(shí),View再繼續(xù)往下滑動(dòng),直到滑到View的頂部結(jié)束。
例子
下面就用協(xié)調(diào)布局寫幾個(gè)常用的例子;
效果1:toolbar隨子view的滾動(dòng)顯示和隱藏
如下圖:

效果2:結(jié)合CollapsingToolbarLayout縮放圖片和toolBar
如下圖:

效果3:類似知乎首頁(yè)滑動(dòng)顯示和影藏的效果;
如下圖:

效果4:viewpager+fragment,滑動(dòng)漸變改變indicator;
如下圖:

放一下github地址,喜歡麻煩給個(gè)star了
github地址