CoordinatorLayout作为“super-powered FrameLayout”基本实现两个功能: 1、作为顶层布局 2、调度协调子布局 CoordinatorLayout使用新的思路通过协调调度子布局的形式实现触摸影响布局的形式产生动画效果...CoordinatorLayout通过设置子View的 Behaviors来调度子View。...使用CoordinatorLayout需要在Gradle加入Support Design Library: CoordinatorLayout, AppBarLayout实现的。...CoordinatorLayout包含的子视图中带有滚动属性的View需要设置app:layout_behavior属性。例如,示例中Viewpager设置了此属性。
最初想用 CoordinatorLayout 加 RecyclerView,但效果不好直接用,或者用 NestedScrollView 与 RecyclerView 组合使用。...是否消费 RecyclerView 发过来的距离,怎么试都不行,最终还是尝试用 CoordinatorLayout 和 RecyclerView 组合。...= null, defStyleAttr: Int = 0 ) : CoordinatorLayout(context, attrs, defStyleAttr) { override fun...的滑动事件,当要吸顶的 Item 滑到要隐藏的时候,让外层 CoordinatorLayout 消费滑动距离。...object : RecyclerView.OnScrollListener() { override fun onScrollStateChanged(recyclerView: RecyclerView
CoordinatorLayout是在desgin包下的一个用于协调子控件的组件,可以解决绝大部分滑动联动问题,使用方法也很简单,为观察者注册一个Behavior,在Behavior指定要监听的控件(可以多个...> CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/...> public class MyBehavior extends CoordinatorLayout.Behavior { /** * 注意:一定要写这个构造方法,因为是CoordinatorLayout...(R.id.recyclerview); recyclerview.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL...(RecyclerView.LayoutParams.MATCH_PARENT, RecyclerView.LayoutParams.MATCH_PARENT)); textView.setTextSize
操作步骤 要让这个过程有动画效果,你需要利用好CoordinatorLayout,CoordinatorLayout帮助协调定义在里面的view之间的动画。...用RecyclerView替换ListViews 目前,你需要用RecyclerView来替换ListView。就如这节所描述的,RecyclerView是ListView的继承者。...你可以查看这篇指南,它帮助你过渡到RecyclerView .support.v7.widget.RecyclerView android:id="@+id/lvToDoList"...> 同时你还必须把RecyclerView升级到v22版本(我在这里使用的是 23.1.1),之前的v21不支持与CoordinatorLayout一起工作,确保你的build.gradle 文件是这样的...= (RecyclerView) findViewById(R.id.rvToDoList); // 线性布局 recyclerView.setLayoutManager
recyclerView; private FloatingActionButton floatingActionButton; private CoordinatorLayout coordinatorLayout...) findViewById(R.id.floatingActionButton); recyclerView = (RecyclerView) findViewById(R.id.rvToDoList...在RecyclerView或者任意支持嵌套滚动的view比如NestedScrollView上添加app:layout_behavior。...发现RecyclerView中定义了这个属性,它会搜索自己所包含的其他view,看看是否有view与这个behavior相关联。...RecyclerView的任意滚动事件都将触发AppBarLayout或者AppBarLayout里面view的改变。
第二种是额外创建一个嵌入 CoordinatorLayout 中的 RecyclerView。...还要注意的是 RecyclerView 应该使用 wrap_content 而不是 match_parent,这是一个新修改,为的是让底部栏只占用必要的而不是全部空间: CoordinatorLayout...> 下一步是创建 RecyclerView。...RecyclerView recyclerView = (RecyclerView) findViewById(R.id.design_bottom_sheet); // Create your items...第三方滚动和视差效果库 除了使用上述的 CoordinatorLayout,还可以查看这些流行的第三方库来实现 ScrollView, ListView, ViewPager 和RecyclerView
CoordinatorLayout各种特效 接下来是介绍CoordinatorLayout常用的一些效果 CoordinatorLayout实现浮动操作按钮效果 效果如下: 只要使用CoordinatorLayout...在RecyclerView或者任意支持嵌套滚动的view比如NestedScrollView上添加app:layout_behavior。...发现RecyclerView中定义了这个属性,它会搜索自己所包含的其他view,看看是否有view与这个behavior相关联。...AppBarLayout.ScrollingViewBehavior描述了RecyclerView与AppBarLayout之间的依赖关系。...RecyclerView的任意滚动事件都将触发AppBarLayout或者AppBarLayout里面view的改变。
当我们引入RecyclerView的时候,恰好是压死骆驼的最后一根稻草,故不得不采用其他方案来代替RecyclerView 和 CollapsingToolbarLayout实现的折叠效果。...> 上述布局需要注意的是: 必须采用CoordinatorLayout作为外层包裹,至于原因是由于使用Behavior需要。...题外话:直接使用RecyclerView折叠动画不平滑问题 在stackoverflow上找到如下解决方案,大致是由于google官方留的Behavior坑。...&& velocityY < 0) { final RecyclerView recyclerView = (RecyclerView) target;...final View firstChild = recyclerView.getChildAt(0); final int childAdapterPosition = recyclerView.getChildAdapterPosition
折叠效果 大家可能有看过 RecyclerView 和 AppBarLayout 联动的效果,这种效果需要给 RecyclerView 配置 Behavior: app:layout_behavior=...; } @Override protected void layoutChild(CoordinatorLayout parent, RecyclerView child, int...@Override public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, final MaterialCalendarView...所以可以这样触发: recyclerView.startNestedScroll(ViewCompat.SCROLL_AXIS_VERTICAL, TYPE_TOUCH); recyclerView.dispatchNestedPreScroll...) { canAutoScroll = false; RecyclerView recyclerView = (RecyclerView) target;
刚复习完View事件分发、滑动冲突--《Android开发艺术探索》阅读笔记——第三章part2,接着想起前段时间项目中首页重构,遇到的嵌套滑动问题,以及CoordinatorLayout 和 AppbarLayout...相对的, 向下滑动内部RecyclerView时,如果还能滑就滑内部RecyclerView;如果已经滑到顶部就让parent去滑动外部RecyclerView。...和 AppbarLayout 联动原理 我以前分享过CoordinatorLayout的使用:《Android进阶之光》Design Support Library常用控件(二):CoordinatorLayout...《CoordinatorLayout 和 AppbarLayout 联动原理解析 》 总结二:联动原理,手指滑动recyclerView时,由于和CoordinatorLayout形成前套滑动,所以事件交给...CoordinatorLayout处理,在CoordinatorLayout的OnTouchEvent中,处理方式就是总结一了,即交给AppBarLayout滑动了。
1.1:创建布局文件design_main_layout.xml 这个布局文件非常简单,只有一个CoordinatorLayout和TextView,但是CoordinatorLayout是重点,滑动控件什么的都和他有关...(CoordinatorLayout coordinatorLayout, View child, View directTargetChild, View target, int nestedScrollAxes...* 滚动监听*/ @Override public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, View child...(myAdapter); CoordinatorLayout.LayoutParams cLayout=(CoordinatorLayout.LayoutParams) img.getLayoutParams...RecyclerView中 app:layout_behavior="@string/appbar_scrolling_view_behavior"方法是必须写的,因为coordinatorlayout
如果你有什么好的应用效果可以和我分享一下: 3.1 FloatingActionButton和RecyclerView的联动 ?...这里存在一个Behavior和CoordinatorLayout的概念,会在后期讲解,这里直接贴出相应的代码了!...public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged...(recyclerView, newState); } @Override public void onScrolled(RecyclerView...recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy);
的 时候,RecyclerView 并不会向上移动(RecyclerView 的滑动事件交给 外部的容器处理,被被全部消费掉了),而是整个布局(指 Header + Tab +ViewPager)会向上偏移...当 Tab 滑动到顶部的时候,我们向上滑动 ViewPager 里面的 RecyclerView 的时候,RecyclerView 可以正常向上滑动,即此时外部容器没有拦截滑动事件。...在页面状态为 close 的时候,不消耗 RecyclerView 的 滑动事件。...也是 Scrolling Child (实现了 NestedScrollingChild 接口),RecyclerView 在开始滑动的 时候会先调用 CoordinatorLayout 的 startNestedScroll...isClosed(child); } 拦截事件之后,我们需要在 RecyclerView 滑动之前消耗事件,并且移动 Header,让其向上偏移。
库(主页面的RecyclerView需要); 2、布局文件的根布局采用android.support.design.widget.CoordinatorLayout,因为design库的动态效果都依赖于该控件...下面是AppBarLayout结合RecyclerView实现的工具栏向上滚动效果截图: ?...下面是AppBarLayout结合RecyclerView的布局文件代码例子: CoordinatorLayout xmlns:android...这还得从CoordinatorLayout说起,查看CoordinatorLayout的源代码,发现它实现了接口NestedScrollingParent,奥秘就在其中,该接口定义了嵌套滚动的父辈行为,...: RecyclerView : 使用名称android.support.v7.widget.RecyclerView NestedScrollView : 使用名称android.support.v4
CoordinatorLayout是design包中的控件,作为外层控件可以协调子控件从而实现炫酷的效果等。...> CoordinatorLayout xmlns:android="http://schemas.android.com/apk/...bottom|end" app:srcCompat="@android:drawable/ic_dialog_email"/> CoordinatorLayout...> CoordinatorLayout xmlns:android="http://schemas.android.com/apk/...app:layout_behavior="@string/appbar_scrolling_view_behavior"/> CoordinatorLayout
,以前写过一篇,那就是《通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout 》,一直关注和看公众号的关注者应该看到过,上一篇的推送也特别讲了 CoordinatorLayout...哈哈……这次写这篇是对我上一篇《通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout 》遗留问题的加强和修改。...第三个问题 CoordinatorLayout协同布局在一般只结合RecyclerView和NestedScrollView使用,所以你用ListView没有效果,如果你硬要用ListView那就比较麻烦了...你去分析源码可以知道RecyclerView和NestedScrollView它们都实现了一个接口NestedScrollingChild,所以我们可以自定义ListView,实现NestedScrollingChild...你也可以使用listView.setNestedScrollingEnabled(true)也行,也能做到,但是貌似这两种方法只能支持在android5.0以上的手机才能用,所以还是建议大家使用RecyclerView
com.google.android.material.navigation.NavigationView:1.0.0' constraintlayout 约束布局 implementation 'androidx.constraintlayout:constraintlayout:1.1.2' coordinatorlayout...布局 implementation 'androidx.coordinatorlayout:coordinatorlayout:1.0.0' design ui 库 implementation 'com.google.android.material...'com.google.android.material.snackbar.Snackbar:1.0.0-rc01'``` RecycleView implementation 'androidx.recyclerview...:recyclerview:1.0.0' TabLayout implementation 'com.google.android.material:material:1.0.0' CardView
TabLayout implementation'com.google.android.material:material:1.0.0' RecycleView implementation'androidx.recyclerview...:recyclerview:1.0.0' Snackbar implementation'com.google.android.material.snackbar.Snackbar:1.0.0-rc01...implementation'androidx.swiperefreshlayout:swiperefreshlayout:1.0.0' viewpager implementation 'androidx.viewpager:viewpager:1.0.0' coordinatorlayout...implementation'androidx.coordinatorlayout:coordinatorlayout:1.0.0' design ui 库 implementation'com.google.android.material
AppBarLayout只有作为CoordinatorLayout的直接子View时才能正常工作,为了让AppBarLayout能够知道何时滚动其子View, 我们还应该在CoordinatorLayout...布局中提供一个可滚动View,如:RecyclerView 布局文件 CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/....widget.Toolbar> RecyclerView...android:id="@+id/recyclerview" android:layout_width="match_parent" android:layout_height
AppBarLayout那篇貌似也没有碰到Behavior啊 不过仔细想一下,好像有个地方比较特殊,那就是app:layout_behavior: RecyclerView...android:text="Flag"/> RecyclerView...app:layout_scrollFlags="scroll" android:text="Find Me"/> RecyclerView...layout_width="match_parent" android:layout_height="match_parent"> RecyclerView...coordinatorLayout, final View fab, boolean show) { //获取fab头顶的高度 int hatHeight = coordinatorLayout.getBottom
领取专属 10元无门槛券
手把手带您无忧上云