Coordinaorlayout --协调者布局,适用于打造折叠悬浮效果。
1.简介
CoordinatorLayout遵循Material 风格,包含在 support Library中,结合AppbarLayout, CollapsingToolbarLayout等可产生各种炫酷的折叠悬浮效果。
作为最上层的View
作为一个容器与一个或者多个子View进行交互
2.AppBarLayout
它是继承与LinearLayout的,默认的方向是Vertical
我们可以通过两种 方法设置这个Flag
方法一
setScrollFlags(int)
方法二
app:layout_scrollFlags="scroll|enterAlways"
AppBarLayout必须作为CoordinatorLayout的直接子View,否则它的大部分功能将不会生效,如layout_scrollFlags等。
3.CollapsingToolbarLayout
简单来说 ,CollapsingToolbarLayout是工具栏的包装器,它通常作为AppBarLayout的孩子。主要实现以下功能
- Collapsing title(可以折叠 的 标题 )
- Content scrim(内容装饰),当我们滑动的位置 到达一定阈值的时候,内容装饰将会被显示或者隐藏
- Status bar scrim(状态栏布)
- Parallax scrolling children,滑动的时候孩子呈现视觉特差效果
- Pinned position children,固定位置的孩子
我们有两种方法可以设置这个常量,
方法一:在代码中使用这个方法
setCollapseMode(int collapseMode)
方法二:在布局文件中使用自定义属性
app:layout_collapseMode="pin"
4. 自定义 Behavior
自定义 Behavior 需要继承自 CoodinatorLayout.Behavior
(1) 事件拦截
onInterceptTouchEvent
onTouchEvent
触摸事件总是先交给 CoodinatorLayout,它会询问所有子 View 的 Behavior 是否需要拦截事件。
直接拖拽 AppBarLayout 也可以滚动,这是因为 AppBarLayout.Behavior 的父类 HeaderBehavior 实现了这两个方法。
(2) 嵌套滚动
onNestedPreScroll
onNestedPreFling
(3) child 和 dependency
layoutDependsOn:决定 child 依赖谁(dependency)。
onDependentViewChanged:dependency 的大小或位置发生了变化。
onDependentViewRemoved:dependency 从父布局中被移除了。
描述了两个(或多个)View 之间的依赖关系,表现为一个或多个 child 依赖 dependency。当 dependency 的大小或位置发生了改变,child 可以做出一些你需要的响应(改变位置、大小等)。