關(guān)于CoordinatorLayout與滾動的處理

轉(zhuǎn)載自:http://www.open-open.com/lib/view/open1437312265428.html

這篇文章專門講解和CoordinatorLayout相關(guān)的知識點,這也是Design Support Library中最重要與最難的部分。

概覽

CoordinatorLayout實現(xiàn)了多種Material Design中提到的滾動效果。目前這個框架提供了幾種不用寫動畫代碼就能工作的方法,這些效果包括:

讓浮動操作按鈕上下滑動,為Snackbar留出空間。

擴展或者縮小Toolbar或者頭部,讓主內(nèi)容區(qū)域有更多的空間。

控制哪個view應(yīng)該擴展還是收縮,以及其顯示大小比例,包括視差滾動效果動畫。

設(shè)置

首先確保遵循了Design Support Library的使用說明。

浮動操作按鈕與Snackbar

CoordinatorLayout可以用來配合浮動操作按鈕的?layout_anchor?和?layout_gravity屬性創(chuàng)造出浮動效果,詳情請參見浮動操作按鈕指南。

Snackbar在顯示的時候,往往出現(xiàn)在屏幕的底部。為了給Snackbar留出空間,浮動操作按鈕需要向上移動。

只要使用CoordinatorLayout作為基本布局,將自動產(chǎn)生向上移動的動畫。浮動操作按鈕有一個默認的 behavior來檢測Snackbar的添加并讓按鈕在Snackbar之上呈現(xiàn)上移與Snackbar等高的動畫。

Toolbar的擴展與收縮

首先需要確保你不是使用已經(jīng)過時的ActionBar。務(wù)必遵循使用ToolBar作為actionbar這篇文章的指南。同樣,這里也需要CoordinatorLayout作為主布局容器。

響應(yīng)滾動事件

接下來,我們必須使用一個容器布局:AppBarLayout來讓Toolbar響應(yīng)滾動事件。

注意:根據(jù)官方的谷歌文檔,AppBarLayout目前必須是第一個嵌套在CoordinatorLayout里面的子view。

然后,我們需要定義AppBarLayout與滾動視圖之間的聯(lián)系。在RecyclerView或者任意支持嵌套滾動的view比如NestedScrollView上添加app:layout_behavior。support library包含了一個特殊的字符串資源@string/appbar_scrolling_view_behavior,它和AppBarLayout.ScrollingViewBehavior相匹配,用來通知AppBarLayout 這個特殊的view何時發(fā)生了滾動事件,這個behavior需要設(shè)置在觸發(fā)事件(滾動)的view之上。

當CoordinatorLayout發(fā)現(xiàn)RecyclerView中定義了這個屬性,它會搜索自己所包含的其他view,看看是否有view與這個behavior相關(guān)聯(lián)。AppBarLayout.ScrollingViewBehavior描述了RecyclerView與AppBarLayout之間的依賴關(guān)系。RecyclerView的任意滾動事件都將觸發(fā)AppBarLayout或者AppBarLayout里面view的改變。

AppBarLayout里面定義的view只要設(shè)置了app:layout_scrollFlags屬性,就可以在RecyclerView滾動事件發(fā)生的時候被觸發(fā):

app:layout_scrollFlags屬性里面必須至少啟用scroll這個flag,這樣這個view才會滾動出屏幕,否則它將一直固定在頂部。可以使用的其他flag有:

enterAlways: 一旦向上滾動這個view就可見。

enterAlwaysCollapsed:顧名思義,這個flag定義的是何時進入(已經(jīng)消失之后何時再次顯示)。假設(shè)你定義了一個最小高度(minHeight)同時enterAlways也定義了,那么view將在到達這個最小高度的時候開始顯示,并且從這個時候開始慢慢展開,當滾動到頂部的時候展開完。

exitUntilCollapsed: 同樣顧名思義,這個flag時定義何時退出,當你定義了一個minHeight,這個view將在滾動到達這個最小高度的時候消失。

記住,要把帶有scroll flag的view放在前面,這樣收回的view才能讓正常退出,而固定的view繼續(xù)留在頂部。

此時,你應(yīng)該注意到我們的Toolbar能夠響應(yīng)滾動事件了。

制造折疊效果

如果想制造toolbar的折疊效果,我們必須把Toolbar放在CollapsingToolbarLayout中:

現(xiàn)在效果就成了:

通常,我們我們都是設(shè)置Toolbar的title,而現(xiàn)在,我們需要把title設(shè)置在CollapsingToolBarLayout上,而不是Toolbar。

CollapsingToolbarLayout?collapsingToolbar?=?(CollapsingToolbarLayout)?findViewById(R.id.collapsing_toolbar);

collapsingToolbar.setTitle("Title");

制造視差效果

CollapsingToolbarLayout還能讓我們做出更高級的動畫,比如在里面放一個ImageView,然后在它折疊的時候漸漸淡出。同時在用戶滾動的時候title的高度也會隨著改變。

為了制造出這種效果,我們添加一個定義了app:layout_collapseMode="parallax"?屬性的ImageView。

自定義Behavior

CoordinatorLayout 與浮動操作按鈕中我們討論了一個自定義behavior的例子。注: 譯文http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0718/3197.html

CoordinatorLayout的工作原理是搜索定義了CoordinatorLayout Behavior的子view,不管是通過在xml中使用app:layout_behavior標簽還是通過在代碼中對view類使用@DefaultBehavior修飾符來添加注解。當滾動發(fā)生的時候,CoordinatorLayout會嘗試觸發(fā)那些聲明了依賴的子view。

要自己定義CoordinatorLayout?Behavior,你需要實現(xiàn)layoutDependsOn() 和onDependentViewChanged()兩個方法。比如AppBarLayout.Behavior 就定義了這兩個關(guān)鍵方法。這個behavior用于當滾動發(fā)生的時候讓AppBarLayout發(fā)生改變。

理解如何實現(xiàn)這些自定義behavior的最好途徑是研究AppBarLayout.Behavior 和?FloatingActionButtion.Behavior。雖然這些源代碼還沒有放出來,但是你可以使用Android Studio 1.2集成的反編譯器來查看。


英文原文:https://guides.codepath.com/android/Handling-Scrolls-with-CoordinatorLayout

參考:Android的材料設(shè)計兼容庫(Design Support Library)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容