CoordinatorLayout 是一个整体的ViewGroup,它的主要作用是协调各个子View之间的滑动交互,也就是Behavior,后期我们会详细讲一下怎么来自定义Behavior。
AppBarLayout:首先,AppBarLayout是一个LinearLayout,它的子View默认纵向排列, 可以通过一些参数控制子View的滑动行为。
AppBarLayout:对下面的子控件提供一些layout_scrollFlags属性的配置
layout_scrollFlags配置详细说明:
全局滑动事件处理
Scroll:跟着滑动的方向进行滑动,如果不配置会一直在屏幕中静态显示。
Snap:这个属性有个很明显回弹效果,当滑动距离过短时,会回弹到最近的上边缘或者下边缘。
向下滑动事件处理
EnterAlways:这个属性其实就是向下滚动时Scrolling View和Child View之间的滚动优先级问题,当向下滚动时,优先滑出Child View,当全部滑出时,再去处理Scrolling View的滑动事件。
EnterAlwaysCollapsed:这个属性是上个属性的附加值,这里涉及到Child View的高度和最小高度,向下滚动时,Child View先向下滚动最小高度值,然后Scrolling View开始滚动,到达边界时,Child View再向下滚动,直至显示完全。
向上滑动事件处理
ExitUntilCollapsed:这里也涉及到最小高度。发生向上滚动事件时,Child View向上滚动退出直至最小高度,然后Scrolling View开始滚动。也就是,Child View不会完全退出屏幕。
CollapsingToolbarLayout:实现Toolbar的折叠效果
contentScrim:折叠后的颜色
layout_collapseMode:pin 滑动时会固定到屏幕上,不会折叠,parallax会发生折叠,并带有一定的视差特效效果,视差特效的比例由layout_collapseParallaxMultiplier来控制。
Behavior: 处理交互的,其中最主要有两个知识点,依赖方和被依赖方。
目前用的系统的这个Behavior 被依赖的是 AppBarLayout,依赖的就是我们下面的整个布局。
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_width="match_parent"
android:layout_height="wrap_content">
app:layout_scrollFlags="scroll|snap|enterAlways|exitUntilCollapsed"
android:id="@+id/shanghai_collapsingtoolbarlayout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
app:layout_collapseParallaxMultiplier="0.6"
android:scaleType="centerCrop"
android:src="@mipmap/shanghai"
android:layout_width="match_parent"
android:layout_height="200dp" />
app:layout_collapseMode="pin"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize">
android:layout_height="match_parent">
android:background="@drawable/shape_splash"
android:id="@+id/tv_shanghai_welcome"
android:textColor="@color/color_ffffff"
android:layout_centerInParent="true"
android:gravity="center"
android:text="今日播报"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
android:id="@+id/tv_marquee_title"
android:focusable="true"
android:focusableInTouchMode="true"
android:marqueeRepeatLimit="marquee_forever"
android:text="目前播放的歌曲:天空"
android:ellipsize="marquee"
android:singleLine="true"
android:textSize="15dp"
android:textColor="@color/color_ffffff"
android:layout_marginLeft="10dp"
android:layout_centerVertical="true"
android:layout_toRightOf="@+id/tv_shanghai_welcome"
android:layout_width="100dp"
android:layout_height="wrap_content" />
android:id="@+id/shanghai_recyclerview"
android:layout_width="match_parent"
android:layout_height="match_parent">