欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android 使用CoordinatorLayout实现滚动标题栏效果的实例

程序员文章站 2023-11-21 10:49:52
在material design里,coordinatorlayout通常用来作为顶层视图,来协调处理各个子view之间的动作,从而实现各种动画效果,如snackbar与f...

在material design里,coordinatorlayout通常用来作为顶层视图,来协调处理各个子view之间的动作,从而实现各种动画效果,如snackbar与floatingactionbutton的配合显示效果,就是以coordinatorlayout作为根布局来实现的

coordinatorlayout提供behaviors接口,子view通过实现behaviors接口来协调和其它view之间的显示效果,可以这么理解:

coordinatorlayout让其子view之间互相知道彼此的存在,任意一个子view的状态变化会通过behaviors通知其它子view,coordinatorlayout就像一个桥梁,连接不同的view,并使用behavior处理各个子view之间的通信

效果一:

Android 使用CoordinatorLayout实现滚动标题栏效果的实例

想实现这样的效果挺简单的,主要是在xml布局文件中进行设置

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

  <!--包裹头部view实现滑动效果-->
  <android.support.design.widget.appbarlayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/themeoverlay.appcompat">

    <!--标题栏-->
    <android.support.v7.widget.toolbar
      android:id="@+id/tb_toolbar"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      app:navigationicon="@android:drawable/ic_dialog_email"
      app:title="title"
      app:layout_scrollflags="scroll" />

    <!--tab导航栏-->
    <android.support.design.widget.tablayout
      android:id="@+id/tab_layout"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      app:tabmode="fixed"
      app:layout_scrollflags="scroll|enteralways"/>

  </android.support.design.widget.appbarlayout>

  <android.support.v4.view.viewpager
    android:id="@+id/vp_tab_pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

</android.support.design.widget.coordinatorlayout>

首先给被appbarlayout包裹的view添加app:layout_scrollflags属性,并设置相应的值

• scroll:让该view可以滚动出屏幕

• enteralways:不需要滚动到顶部,只要有向上滚动的事件就显示该view

• enteralwayscollapsed:定义该view何时进入,如果你定义了一个最小高度minheight,同时enteralways也定义了,那么该view将会在到达这个最小高度的时候开始慢慢显示,直到滚动组件滚动到顶部时再完全展开

• exituntilcollapsed:定义该view何时退出,如果你定义了一个最小高度minheight,那么这个view将在滚动到达这个最小高度时消失

如果不设置layout_scrollflags属性,那么该view就会固定在屏幕上

enteralwayscollapsed和exituntilcollapsed属性主要是在搭配collapsingtoolbarlayout时使用的

注意:布局的时候,appbarlayout里面滚动的view要放在固定的view上面

然后在coordinatorlayout布局里放一个可以滚动的view(不支持listview),这里使用viewpager里放置一个recylerview,为该viewpager设置app:layout_behavior属性,这里可直接使用android自带的值

app:layout_behavior=”@string/appbar_scrolling_view_behavior”

设置该值的作用相当于告诉coordinatorlayout,此view是一个滚动控件,如果该view滚动了,那么设置了layout_scrollflags属性的控件就可以响应滚动事件了

想实现效果一,总结

使用coordinatorlayout作为根布局

使用appbarlayout包裹头部view,并给需要滚动的view设置app:layout_scrollflags属性

给滑动组件设置app:layout_behavior属性

效果二:

Android 使用CoordinatorLayout实现滚动标题栏效果的实例

想实现这个效果,需要使用到collapsingtoolbarlayout布局,我们在效果一的基础上更改布局代码

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.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">

  <android.support.design.widget.appbarlayout
    android:layout_width="match_parent"
    android:layout_height="300dp"
    android:fitssystemwindows="true"
    android:theme="@style/themeoverlay.appcompat.dark.actionbar">

    <android.support.design.widget.collapsingtoolbarlayout
      android:id="@+id/collapsing_toolbar"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      app:contentscrim="?attr/colorprimary"
      app:expandedtitlemarginend="88dp"
      app:expandedtitlemarginstart="66dp"
      app:layout_scrollflags="scroll|exituntilcollapsed">

      <!--拉开后显示的背景图片-->
      <imageview
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaletype="centercrop"
        android:src="@drawable/bg_image"
        app:layout_collapsemode="pin"/>

      <!--标题栏-->
      <android.support.v7.widget.toolbar
        android:id="@+id/tb_toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionbarsize"
        app:layout_collapsemode="pin"
        app:navigationicon="@android:drawable/ic_dialog_email"
        app:title="title"/>

    </android.support.design.widget.collapsingtoolbarlayout>

  </android.support.design.widget.appbarlayout>

  <android.support.v7.widget.recyclerview
    android:id="@+id/rv_data"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

</android.support.design.widget.coordinatorlayout>

一些属性的作用

• title:设置toolbar的标题,注意:如果在collapsingtoolbarlayout中指定了title属性,那么toolbar中的title属性将会变得无效

• expandedtitlemarginstart:设置下拉伸缩完成后,toolbar标题文字左边的margin距离

• expandedtitlemarginend:设置下拉伸缩完成后,toolbar标题文字右边的margin距离

• contentscrim:设置toolbar折叠到顶部后的背景

• layout_collapsemode:折叠效果,有两个值,pin代表从底部拉出,parallax代表从中间展开

看文字可能不太理解collapsemode的显示效果,两个值的具体显示效果如下:

pin:

Android 使用CoordinatorLayout实现滚动标题栏效果的实例

parallax:

Android 使用CoordinatorLayout实现滚动标题栏效果的实例

想实现效果二,总结

首先我们设置一个固定的高度给appbarlayout

然后给appbarlayout的子view包裹了一层collapsingtoolbarlayout,并设置collapsingtoolbarlayout的滚动属性为scroll|exituntilcollapsed

最后再为collapsingtoolbarlayout里的子view设置layout_collapsemode属性,指定其展示效果

以上这篇android 使用coordinatorlayout实现滚动标题栏效果的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。