Android 使用CoordinatorLayout实现滚动标题栏效果的实例
在material design里,coordinatorlayout通常用来作为顶层视图,来协调处理各个子view之间的动作,从而实现各种动画效果,如snackbar与floatingactionbutton的配合显示效果,就是以coordinatorlayout作为根布局来实现的
coordinatorlayout提供behaviors接口,子view通过实现behaviors接口来协调和其它view之间的显示效果,可以这么理解:
coordinatorlayout让其子view之间互相知道彼此的存在,任意一个子view的状态变化会通过behaviors通知其它子view,coordinatorlayout就像一个桥梁,连接不同的view,并使用behavior处理各个子view之间的通信
效果一:
想实现这样的效果挺简单的,主要是在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属性
效果二:
想实现这个效果,需要使用到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:
parallax:
想实现效果二,总结
首先我们设置一个固定的高度给appbarlayout
然后给appbarlayout的子view包裹了一层collapsingtoolbarlayout,并设置collapsingtoolbarlayout的滚动属性为scroll|exituntilcollapsed
最后再为collapsingtoolbarlayout里的子view设置layout_collapsemode属性,指定其展示效果
以上这篇android 使用coordinatorlayout实现滚动标题栏效果的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
推荐阅读
-
Android 使用CoordinatorLayout实现滚动标题栏效果的实例
-
Android Support Library 标题栏(Toolbar)滚动效果实现方法
-
Android实现两个ScrollView互相联动的同步滚动效果代码
-
Android编程使用自定义shape实现shadow阴影效果的方法
-
Android实现Path平滑的涂鸦效果实例
-
Android中ViewFlipper的使用及设置动画效果实例详解
-
android实现自动滚动的Gallary控件效果
-
Android编程实现类似天气预报图文字幕垂直滚动效果的方法
-
Android中实现多行、水平滚动的分页的Gridview实例源码
-
Android使用Recyclerview实现图片水平自动循环滚动效果