通過(guò) CoordinateLayout
+ AppBarLayout
+ CollapsingToolbarLayout
組裝成一個(gè)符合 Material 動(dòng)畫表現(xiàn)的復(fù)合 Toolbar埋酬。
結(jié)構(gòu)
<CoordinatorLayout> // 提供子類相互關(guān)聯(lián)同步運(yùn)動(dòng)功能
<AppBarLayout> // 組裝一個(gè)合成的 App bar翻屈,并提供基本的同步滾動(dòng)功能實(shí)現(xiàn)
<CollapsingToolbarLayout> // 提供 Toolbar 專用的 Material 折疊笆呆、形變動(dòng)畫
<Background View />
<Toolbar
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize" />
</CollapsingToolbarLayout>
<Other part belong to app bar /> // 同步滾動(dòng)功能對(duì)其他?子View 無(wú)效
</AppBarLayout>
<NestedScrollingChild /> // 提供滾動(dòng)參考數(shù)據(jù)
...
</CoordinatorLayout>
CoordinatorLayout
提供 View 之間的基礎(chǔ)聯(lián)動(dòng)交互功能
布局方式與 FrameLayout 相同,可協(xié)調(diào)(關(guān)聯(lián))內(nèi)部任意某些 子View(指定app:layout_behavior
屬性商架,aka "ChildView")跟隨另一個(gè)任意特定 View(aka "DependencyView")的尺寸欺冀、位置變化或被移除碉碉、手勢(shì)交互等動(dòng)作時(shí),做相對(duì)變化響應(yīng)(需要自定義Behavior處理器
并設(shè)置到上面的屬性中)恬试。
關(guān)于 anchor
子View 可指定任意另一個(gè) CoordinatorLayout 內(nèi)的子View作為其錨定(anchor)的對(duì)象,用于布置浮動(dòng)跟隨型的View疯暑,此時(shí) 子View 將跟隨其 anchor 指定的 anchoredView 移動(dòng)训柴。
子View 不能錨定自己本身,也不能錨定其 子View(會(huì)形成環(huán)形依賴)妇拯。
屬性
Constructor部分幻馁,用于本體
-
statusBarBackground
:狀態(tài)欄背景 Drawable
LayoutParams部分,用于子元素
-
layout_behavior
:用于 ChildView 上越锈,指定當(dāng)前 View 相對(duì)于其他 View 的相對(duì)動(dòng)作響應(yīng)處理器 -
layout_anchor
:指定一個(gè)錨定對(duì)象View -
layout_anchorGravity
:指定錨定跟隨位置仗嗦,默認(rèn)為目標(biāo)對(duì)象的左上角 -
layout_insetEdge
:該子View 從哪個(gè)方向插入 CoordinatorLayout 容器 -
layout_dodgeInsetEdges
:該子View 回避下一個(gè)同方向插入的 View 的移動(dòng)方向
Behavior
用于指定當(dāng)前View(Child)相對(duì)于其他View(Dependency)作出自定義響應(yīng)的邏輯腳本監(jiān)聽響應(yīng)類
AppBarLayout
提供基礎(chǔ)關(guān)聯(lián)滾動(dòng)實(shí)現(xiàn)
LinearLayout 子類容器,用于垂直串聯(lián)組裝一個(gè)邏輯上的 AppBar(不限定使用 Toolbar)甘凭,內(nèi)部指定了默認(rèn)Behavior
實(shí)現(xiàn)稀拐,可讓(第一個(gè))子View(通過(guò)app:layout_scrollFlags
屬性值指定)跟隨外部的 ScrollableView(NestedScrollingChild子類)滾動(dòng)動(dòng)作而做特定滾動(dòng)動(dòng)作。
通常需要在 NestedScrollingChild(或其父容器)上指定app:layout_behavior="@string/appbar_scrolling_view_behavior"
丹弱,使該 View 在 CoordinatorLayout 中正確布局在 AppBarLayout 下方德撬,并隨 AppBarLayout 滾動(dòng)做相對(duì)位移。
屬性
Constructor部分躲胳,用于本體(僅在 CoordinatorLayout 內(nèi)生效)
-
expanded
:初始化時(shí)是否以擴(kuò)展形式展示
LayoutParams部分蜓洪,僅用于第一個(gè)子元素
-
layout_scrollFlags
:指定聯(lián)動(dòng)滾動(dòng)的表現(xiàn)方式- scroll:作為頭部,與目標(biāo) View 的 scroll 動(dòng)作同步滾動(dòng)坯苹,該值作為下面其他屬性的前提條件聯(lián)合使用隆檀,如
app:layout_scrollFlags="scroll|...
- enterAlways:scroll 下滑動(dòng)作發(fā)生時(shí),立即觸發(fā) AppBar 下滑彈出
- enterAlwaysCollapsed:與
enterAlways
配套粹湃,AppBar 僅彈出一個(gè)最小高度恐仑,直至 scroll 下滑至頂端時(shí),再繼續(xù)下滑彈出完整的 AppBar - exitUntilCollapsed:scroll 上滑動(dòng)作發(fā)生時(shí)为鳄,AppBar 僅上滑收縮至一個(gè)最小高度(普通 Toolbar 高度)裳仆,不完全隱藏
- snap:AppBar 作為一個(gè)整體完整出現(xiàn)或隱藏,并提供彈性動(dòng)畫效果
- scroll:作為頭部,與目標(biāo) View 的 scroll 動(dòng)作同步滾動(dòng)坯苹,該值作為下面其他屬性的前提條件聯(lián)合使用隆檀,如
-
layout_scrollInterpolator
:指定動(dòng)畫曲線插值器
CollapsingToolbarLayout
提供 Material 式的關(guān)聯(lián)滾動(dòng)動(dòng)畫實(shí)現(xiàn)(依賴 AppBarLayout)
FrameLayout 子類济赎,用于包裹(層疊) Toolbar 及其 背景View 等部件鉴逞,(通過(guò)指定各種app:
屬性值)提供符合 Material Design 規(guī)范的 Toolbar 及其背景的折疊拉伸、遮罩司训、視差動(dòng)畫等視覺效果。
需要放置在 AppBarLayout
下作為直接子View使用(可復(fù)數(shù)并列使用)液南。
使用方式可參考 玩轉(zhuǎn)AppBarLayout壳猜。
屬性
Constructor部分,用于本體
-
collapsedTitleGravity
滑凉、expandedTitleGravity
:縮放后 Title 的對(duì)齊方式- center统扳、center_vertical喘帚、center_horizontal
- start、end
- top咒钟、bottom吹由、left、right
- fill_vertical
-
expandedTitleMargin
朱嘴、expandedTitleMarginStart
倾鲫、expandedTitleMarginEnd
、expandedTitleMarginTop
萍嬉、expandedTitleMarginBottom
:Title 擴(kuò)展后所需的四邊 margin -
collapsedTitleTextAppearance
乌昔、expandedTitleTextAppearance
:縮放后 Title 的 style 形式(顏色和大小) -
contentScrim
:內(nèi)容遮罩壤追,Toolbar 折疊完畢后覆蓋原背景圖的新背景顏色 -
statusBarScrim
:狀態(tài)欄背景遮罩磕道,要求 API 21 并設(shè)置 fitsSystemWindows -
scrimVisibleHeightTrigger
:觸發(fā)遮罩效果的最小可視高度(帶單位) -
scrimAnimationDuration
:遮罩動(dòng)畫時(shí)長(zhǎng) -
titleEnabled
:是否啟用動(dòng)態(tài)縮放 Title -
title
:Toolbar 折疊后顯示的標(biāo)題文字,會(huì)根據(jù)折疊程度縮放大小 -
toolbarId
:指定應(yīng)用動(dòng)畫效果的 Toolbar 組件id行冰,不指定則以第一個(gè)搜索到的 Toolbar 為準(zhǔn)
另外可通過(guò)代碼獨(dú)立指定 Title 的顏色溺蕉、字體、遮罩圖像悼做、遮罩及其動(dòng)畫開閉等效果焙贷。
LayoutParams部分,用于直接子元素
-
layout_collapseMode
Bar發(fā)生聯(lián)動(dòng)滾動(dòng)折疊時(shí)贿堰,子View的動(dòng)作模式- none:不折疊
- pin:折疊模式下 Toolbar 保留在頂部位置
- parallax:視差跟隨滾動(dòng)
-
layout_collapseParallaxMultiplier
視差浮點(diǎn)系數(shù)辙芍,控制視差滾動(dòng)的偏移量,負(fù)數(shù)表示加速滾動(dòng)羹与,0 表示完全跟隨滾動(dòng)(沒有視差效果)故硅,1f 表示完全逆向滾動(dòng)(相對(duì)靜止?fàn)顟B(tài)),>1f 表示逆向加速滾動(dòng)纵搁,默認(rèn)值為0.5吃衅,源碼視差偏移算法簡(jiǎn)約為offset = Math.round(-verticalOffset * parallaxMult)
,其中verticalOffset
表示 scroll 的垂直滾動(dòng)量