關于CoordinatorLayout

DEMO https://github.com/wujianxing/Coordi.git

在我的理解里CoordinatorLayout 是一個類似FrameLayout的容器,它是實現了NestedScrollingParent 接口的父布局容器,

提到 NestedScrollingParent 就不得不說 NestedScrollingChild,其實簡單來說NestedScrollingParent與NestedScrollingChild 是一對的。他們的功能是實現父與子試圖的聯動。

關于聯動,那么就有一個叫 Behavior 的東西,,行為。。就是具體聯動的形式(實現)。

先看布局層級吧

A3AAFA79-6A06-4EEA-8865-584170833045.png

最外層 是 CoordinatorLayout ,它的直接子布局有3個

  1.AppBarLayout
  2.NestedScrollView
  3.Toolbar

AppBarLayout

走進它的源碼一看@CoordinatorLayout.DefaultBehavior(AppBarLayout.Behavior.class) ,是的它是有一個默認的行為的。具體什么我們先不管 。
  在看看 AppBarLayout 裝了什么 沒錯 CollapsingToolbarLayout。一個繼承 FrameLayout 的東西
 然后 CollapsingToolbarLayout 裝了 兩個View 和一個FrameLayout .最里面FrameLayout裝了兩個View  

NestedScrollView

    是實現了 NestedScrollingParent,        NestedScrollingChild, ScrollingView 的FrameLayout
    我們給他一個行為  app:behavior_overlapTop="30dp"app:layout_behavior="@string/appbar_scrolling_view_behavior,并在里面裝一個 cardView 的容器

Toolbar 標題 我們就放一個標題

既然有滾動 那么必須了解 layout_scrollFlags;

  app:layout_scrollFlags="scroll|exitUntilCollapsed|snap

scroll

    Child View 伴隨著滾動事件而滾出或滾進屏幕。注意兩點:第一點,如果使用了其他值,必定要使用這個值才能起作用;第二點:如果在這個child View前面的任何其他Child View沒有設置這個值,那么這個Child View的設置將失去作用。

enterAlways

     快速返回模式。其實就是向下滾動時Scrolling View和Child View之間的滾動優先級問題。對比scroll和scroll | enterAlways設置,發生向下滾動事件時,前者優先滾動Scrolling View,后者優先滾動Child View,當優先滾動的一方已經全部滾進屏幕之后,另一方才開始滾動

enterAlwaysCollapsed

    enterAlways的附加值。這里涉及到Child View的高度和最小高度,向下滾動時,Child View先向下滾動最小高度值,然后Scrolling View開始滾動,到達邊界時,Child View再向下滾動,直至顯示完全。

    需要附加屬性
    android:layout_height="@dimen/dp_200"android:minHeight="@dimen/dp_56

exitUntilCollapsed

   這里也涉及到最小高度。發生向上滾動事件時,Child View向上滾動退出直至最小高度,然后Scrolling View開始滾動。也就是,Child View不會完全退出屏幕。

   需要附加屬性

  android:layout_height="@dimen/dp_200"android:minHeight="@dimen/dp_56"

snap

 簡單理解,就是Child View滾動比例的一個吸附效果。也就是說,Child View不會存在局部顯示的情況,滾動Child View的部分高度,當我們松開手指時,Child View要么向上全部滾出屏幕,要么向下全部滾進屏幕,有點類似ViewPager的左右滑動。

  需要附加屬性
   android:layout_height="@dimen/dp_200"

這5個都是控制 AppBarLayout 與 子類滑動的屬性。。

layout_collapseMode

 pin -  設置為這個模式時,當CollapsingToolbarLayout完全收縮后,Toolbar還可以保留在屏幕上。

 parallax - 設置為這個模式時,在內容滾動時,CollapsingToolbarLayout中的View(比如ImageView)也可以同時滾動,實現視差滾動效果,通常和layout_collapseParallaxMultiplier(設置視差因子)搭配使用。

  layout_collapseParallaxMultiplier(視差因子) - 設置視差滾動因子,值為:0~1。 

NestedScrollView

   NestedScrollView是一個簡單的控件,作用跟ScrollView基本沒差別,關鍵在于跟ToolBar交互產生的作用
    app:layout_behavior=@string/appbar_scrolling_view_behavior
 與  CollapsingToolbarLayout 中  app:layout_scrollFlags="scroll|exitUntilCollapsed"對應 ,,,,系統一旦發現NestedScrollView中有那句話,就會檢查其他控件,然后如果有上面這句對應的話,那么滑動效果就是可以實現的。就這一點來說,他的使用基本上和RecyclerView一樣   屌屌的。。

layout_anchor

anchor 錨 ,試圖綁定,綁定在一起滑動

如圖 。。


jz.gif

有問題 什么鬼 。怎么有個東西擋住了。。。 醬紫我喜歡的。。哪里是什么東西 對把它隱藏掉 他是appLayoutBar里面的東西 。。 下次隱藏吧。

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

推薦閱讀更多精彩內容