CoordinatorLayout 学习(一) - CoordinatorLayout的基本使用

  最近忙完了学校的事情,终于又成功的跑去公司上班了(还好公司没有嫌弃我菜😂😂)。在学校废了半年多,感受好多东西都不太会了,因此以为本身应该找点事情来作,因而选中学习CoordinatorLayout。其实在昨年,我就对CoordinatorLayout进行了简单的学习,不过当时学习的重点放在了嵌套滑动,从而未对CoordinatorLayout进行深刻和系统的学习,这个也算是昨年留下的一个遗憾。所以,我以为仍是应该弥补一下。   楼主写一个系列文章来详细的介绍CoordinatorLayout,分别会介绍它的基本使用,Behavior的原理解析以及自定义,最后就是CoordinatorLayout的扩展,这部分的内容不固定,篇幅也不固定。   本文参考文章android

  1. CoordinatorLayout使用详解: 打造折叠悬浮效果

1. 概述

  做为本系列文章第一篇文章,我以为仍是有必要简单介绍一下CoordinatorLayout。   CoordinatorLayout顾名思义,协调者布局。所谓的协调者布局,它主要是协调谁,协调啥呢?我相信你们在学这个布局时,都会思考这两个问题。其实说的简单点,协调者布局主要协调child之间的联动。请注意个人措辞,child之间的联动。   可能有的同窗对联动仍是有点陌生,我简单的举一个例子,好比说,咱们在滑动一个RecyclerView,存在一个View须要在RecyclerView滑动时作相应的动做,例如,位移变化,缩放变化等等。我相信这种场景仍是很是常见的吧。这种场景就能够称之为child之间联动。   而CoordinatorLayout是怎么进行协调呢?主要依靠一个插件--Behavior。在CoordinatorLayout内部,每一个child都必须带一个Behavior(其实不携带也行,不携带就不能被协调),CoordinatorLayout就根据每一个child所携带的Behavior信息进行协调。   这里还须要提一句的是,Behavior不只仅协助联动,并且仍是接管了child的三大流程,有点相似于RecyclerViewLayoutManager。   而Behavior是怎么进行协助联动呢?这就涉及到嵌套滑动的相关知识,总的来讲,Behavior包括整个CoordinatorLayout体系就是对嵌套滑动的应用和实现。因此,咱们便知道了,嵌套滑动到底有多么重要了。   本文主要介绍CoordinatorLayout的基本使用,主要是介绍CoordinatorLayoutAppBarLayout的搭配使用。 #2. AppBarLayout   若是咱们想要实现折叠的ActionBar效果,在CoordinatorLayout中,AppBarLayout绝对是做为首选的控件。   在正式介绍AppBarLayout的使用时,咱们先来看看几个Flag,这几个Flag在AppBarLayout里面很是的重要。bash

名称 做用
SCROLL_FLAG_NO_SCROLL 0x0 设置这个flag,将表示该View不能被滑动。也就是说不参与联动。
SCROLL_FLAG_SCROLL 0x01 设置这个Flag,表示该View参与联动。具体效果须要跟其余Flag组合。
SCROLL_FLAG_EXIT_UNTIL_COLLAPSED 0x02 设置这个Flag,表示当View被推出屏幕时,会跟着滑动,直到折叠到View的最小高度;同时只有在其余View(好比说RecyclerView)滑动到顶部才会展开。
SCROLL_FLAG_ENTER_ALWAYS 0x02 设置这个Flag,不论是View是滑出屏幕仍是滑进屏幕,该View都能当即响应滑动事件,跟随滑动。好比说,若是该View是折叠的,当RecyclerView向下滑动时,该View随时都能跟随展开;反之亦然。
SCROLL_FLAG_ENTER_ALWAYS_COLLAPSED 0x04 SCROLL_FLAG_ENTER_ALWAYS的基础上,该Flag增长了折叠到固定高度的限制。在View下拉过程当中,首先会将该View显示minHeight的高度,RecyclerView在继续下拉(这里以RecyclerView为例)。注意,该Flag在SCROLL_FLAG_ENTER_ALWAYS前提下生效。
SCROLL_FLAG_SNAP 0x08 该Flag表示View拥有吸附功能。好比说,当前滑动中止,View离底部更近,那么就会折叠;反之则会展开。

  这几个Flag很是的简单,咱们来看看具体的使用,先来看看布局文件:app

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.google.android.material.appbar.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <View
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:background="#5FF"
            app:layout_scrollFlags="scroll|enterAlwaysCollapsed" />
        <View
            android:background="#FF00FF"
            android:layout_width="match_parent"
            android:layout_height="50dp"/>
    </com.google.android.material.appbar.AppBarLayout>

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
复制代码

  这里须要几点,以下:布局

  1. 我在AppBarLayout里面放了两个View,其中一个设置scrollFlags,一个没有设置。没有设置的是不会折叠的。
  2. 在这里,AppBarLayout并无设置Behavior,而RecyclerView却设置了的。我统一的解释一下,在CoordinatorLayout内部,理论上每一个View必须携带一个Behavior,而这里AppBarLayout没有携带是由于它自己就有,因此不须要申明(在后面,咱们会看到几种设置Behavior的方式,这里买一个关子。)

  而后,咱们来看看效果: 学习

  这里,我再也不介绍其余Flag的效果,有兴趣能够尝试一下。google

3. CollapsingToolbarLayout

  接下来,咱们再来看一下CollapsingToolbarLayoutCollapsingToolbarLayout主要是实现折叠布局的,咱们来看看是怎么使用的。首先,咱们来看看CollapsingToolbarLayout的几个Flag:spa

名称 做用
COLLAPSE_MODE_OFF 0 默认值,表示View不会有任何属性
COLLAPSE_MODE_PIN 1 CollapsingToolbarLayout彻底收缩以后,设置该Flag的View会保留在屏幕当中。
COLLAPSE_MODE_PARALLAX 2 设置该Flag的View会跟内容滚动,能够经过setParallaxMultiplier方法来设置视图差比率,其中0表示毫无视图差,彻底跟内容滚动同步;1表示View彻底不动。默认的视图差为0.5。

  接下来咱们看一个Demo:.net

<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.google.android.material.appbar.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="300dp">

        <com.google.android.material.appbar.CollapsingToolbarLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">

            <ImageView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:scaleType="centerCrop"
                android:src="@drawable/demo"
                app:layout_collapseMode="parallax" />

            <androidx.appcompat.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="50dp"
                android:background="#5FF"
                app:layout_collapseMode="pin" />
        </com.google.android.material.appbar.CollapsingToolbarLayout>
    </com.google.android.material.appbar.AppBarLayout>

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
复制代码

  使用CollapsingToolbarLayout时,咱们须要注意的是:CollapsingToolbarLayout须要做为AppBarLayout子View。而后咱们来看看相关的效果: 插件

#4. 总结   本文主要介绍CoordinatorLayout的基本使用,仍是很是简单的,可是咱们从上面的代码看出,好像根本就没有介绍它。CoordinatorLayout做为协调者,确定是很是重要的,具体介绍在后续的文章会详细的分析。在这里先对本文作一个简单的总结。code

  1. 使用AppBarLayout时,咱们须要注意4种flag的不一样点。
  2. CollapsingToolbarLayout须要做为AppBarLayout的子View才会有效,同时还须要注意它的3种flag。

  若是不出意外的话,下一篇文章咱们将分析RecyclerViewAppBarLayout的联动。

相关文章
相关标签/搜索