RecyclerView是其中一个特工,它可用来替代ListView和GridView;替代ScrollView的则另有其人,它便是嵌套滚动视图NestedScrollView,在Android5.0之后的...所以,搜遍Android的SDK源码,总共也只有三个控件符合这个条件,它们是RecyclerView、NestedScrollView,以及SwipeRefreshLayout,在布局文件中使用的名称如下所示...3、大家都知道ViewPager是左右滚动的翻页视图,用户通过手势把页面横向拉动一段距离后松开,系统会判断接下来是自动左滚还是自动右滚,总之最后用户看到的是一个完整的页面,而不是拉到一半的页面。...区分好了各种滚动行为的起因与目的,然后再来谈谈layout_scrollFlags的标志位取值说明,具体的取值有五个说明如下: 1、scroll : 头部与主体一起滚动。...具体的滚动说明如下所示: 向上滚动:头部先往上收缩,一直滚到折叠的最小高度。然后头部与主体先一起滚动,头部滚到位后,主体继续向上。 向下滚动:头部与主体先一起滚动,一直滚到头部折叠的最小高度。
如果滑动的时候不拦截的话,手势事件会交给子view去处理,如果子view是可以滚动的,这时候就会有冲突,所有滚动的时候事件要拦截下来交给自己处理。...(dx, dy, consumed, null, type); 会继续往父布局的父布局分发 pre-scroll。...接下来会继续执行 dispatchNestedScroll: ViewParentCompat.onNestedScroll(parent, mView, dxConsumed,...个方法类似: 在 NestedScrollView里,仍然会带着最新的消费距离去继续分发嵌套滚动的事件: 这里父布局会接收到子view传来的 dyUnconsumed ,然后进行 scrollBy...嵌套滚动方案的选择 有了这些接口之后,我们可以看到其实内置的Android 控件都支持了滑动嵌套,那么是否我们平时使用的方法都是正确的呢?
所以根据以上情况,「ListView 会输出一个 paintExtent 为 701 ,cacheExtent 为 1026 的 SliverGeometry」。...image.png 这里面有几个关键的对象,其中: SliverFillRemaining :用于充满 Viewport 的剩余空间,在 NestedScrollView 里面就是充满 header...最后在 _NestedScrollCoordinator 的 drag 和 applyUserOffset 等方法里进行内外滚动的分配; image.png SliverPersistentHeader...image.png 「所以 Sliver 被固定住的原理,其实就是 Viewport 得到了它的 paintExtent 和 layoutExtent 并不为 0,所以会继续为这个 Sliver 绘制对应区域的内容...image.png 如上动图所示,可以看到 item0 并没有在橙色区域停止滑动,而是继续往上滑动,这就是因为作为 body 的列表不知道顶部有固定区域。
所以根据以上情况,ListView 会输出一个 paintExtent 为 701 ,cacheExtent 为 1026 的 SliverGeometry。...image 这里面有几个关键的对象,其中: SliverFillRemaining :用于充满 Viewport 的剩余空间,在 NestedScrollView 里面就是充满 header 之外的剩余空间...最后在 _NestedScrollCoordinator 的 drag 和 applyUserOffset 等方法里进行内外滚动的分配; ?...image 所以 Sliver 被固定住的原理,其实就是 Viewport 得到了它的 paintExtent 和 layoutExtent 并不为 0,所以会继续为这个 Sliver 绘制对应区域的内容...image 如上动图所示,可以看到 item0 并没有在橙色区域停止滑动,而是继续往上滑动,这就是因为作为 body 的列表不知道顶部有固定区域。
其中, scroll表示CollapsingToolbarLayout会随着水果内容详情的滚动一起滚动, exitUntilCollapsed表示当CollapsingToolbarLayout随着滚动完成折叠之后就保留在界面上...> 我们知道ScrollView允许使用滚动的方式来查看屏幕以外的数据, 而NestedScrollView...由于CoordinatorLayout本身已经可以响应滚动事件了, 因此我们在它的内部就需要使用NestedScrollView或RecyclerView这样可以响应滚动事件的布局。...向上拖动水果图片,背景图上的标题会慢慢缩小,而且会产生错位偏移的效果,toolbar的位置和图片还会产生透明度的变化等等,效果十分炫酷。 ? ?...这是由于用户想要查看水果的内容详情,此时界面的重点在具体的内容上面,因此标题栏就会自动进行折叠,从而节省屏幕空间。 继续向上拖动,直到标题栏变成完全折叠状态,效果如图: ?
上节最后留了个坑到这节来解决,因为涉及部件比较多,所以留到这边来继续讲,不然写太多了怕小伙伴看不下去 在上节最后,给小伙伴们展示了 SliveGrid 和 SliverFixedExtentList 的用法...,会显示 AppBar ?...总结下 SliverToBoxAdapter 的功能就是 把一个普通部件包裹成为 Sliver 部件,例子就不举了,上节已经有了。...不过 Flutter 也提供了专门的部件 SliverPadding 使用方式同 Padding,但是需要传入一个 sliver 作为子类。...糟透了的翻译 X 1:一个内部能够嵌套其他滚动部件,并使其滚动位置联结到一起的滚动部件 /// The most common use case for this widget is a scrollable
,NestedScrollView设置了layout_behavior属性,这样AppBarLayout里面的布局就可以跟着一起滚动,不过由于这里还没给AppBarLayout里面的scrollFlags...;不过需要注意的是,如果单独设置ImageView的为scroll,而不设置ToolBar,是没有效果的,因为ToolBar把ImageView给顶住了,只有下面的ScrollView会滚动。...,然后才是ScrollView滚动,而设置了enterAlwaysCollapsed之后,再配合minHeight属性,可以有不同的效果,先看xml设置: 滚动时,当ScrollView滚动顶部了,才继续滚动了。 snap snap是一个根据View在屏幕上显示范围进行调整的一个属性,看下效果其实就明白是怎么回事了。...后面会继续学习与CollapsingToolbarLayout一起的使用。
,但是第二个feed之 后的滚动是流畅的,因为这个时候RecyclerView已经有能重用的view了。...什么时候LayoutManager会从RecyclerView上分离呢,有两种情况:1)重新setLayoutManager()时,比如淘宝页面查看商品列表,可以线性查看,也可以表格形式查看,2)还有一种是...(false);//RecyclerView默认是setNestedScrollingEnabled(true),是支持嵌套滚动的,也就是说当它嵌套在NestedScrollView中时,默认会随着NestedScrollView...后记: RecyclerView的优化点肯定还有很多,坑也还有很多,这和应用的实际使用情况有很大关系。同时Google开发工程师也一直在优化RecyclerView,我们也要一直学习着。...本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
AppBarLayout的子布局有5种滚动标识(上面代码CollapsingToolbarLayout中配置的app:layout_scrollFlags属性): scroll:所有想滚动出屏幕的view...上面NestedScrollView中app:layout_behavior="@string/appbar_scrolling_view_behavior"的Behavior是系统默认的,我们也可以根据自己的需求来自定义...在RecyclerView或者任意支持嵌套滚动的view比如NestedScrollView上添加app:layout_behavior。...可以使用的其他flag有: enterAlways: 一旦向上滚动这个view就可见。...假设你定义了一个最小高度(minHeight)同时enterAlways也定义了,那么view将在到达这个最小高度的时候开始显示,并且从这个时候开始慢慢展开,当滚动到顶部的时候展开完。
在 xml 中通过 app:layout_behavior="@string/appbar_scrolling_view_behavior" 多说两句,有同学可能会想一定要是 NestedScrollView...而 enterAlways 这个标志与 scroll 配合使用可以改变这种行为,enterAlways 起作用时,当手指向下滑动时,Toolbar 会和 NestedScrollView 一起滑动,它们是同时滑动的...因为有 enterAlways 的存在,Toolbar 会和 NestedScrollView 一起响应滑动,但是又因为 enterAlwaysCollapsed 的存在,它的这种行为被限定了。...也就是说 snap 代表一种吸附的行为,当一个滑动事件结束后,Toolbar 会向最接近它的边缘自行滚动。那什么是最近的概念呢?比如向上滑动时,如果滑过了一半它就向上滚动,否则滚动回原来的地方。...CollapsingToolbarLayout 可以控制的子 View 滚动模式有 3 种: none 默认,无任何效果 Parallax 视差滚动 pin 固定某个 View 它通过 xml
imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) - 简单的参考 ,一般也会写一个style,用的时候,继承即可 - ``` 会一直显示 ---- Toolbar和NestedScrollView联动 前面不能联动,是因为没有接收的behavior 我们在Toolbar外面添加一个 android.support.design.widget.AppBarLayout...这里app:layout_scrollFlags有一些可以选择的 具体每种是干什么的?...设置exitUntilCollapsed也就是为true的时候,任意向上的滚动都会让view(Toolbar)变为minHeight的高度可见,而不会全部消失 反之,不设置,也就是false,会全部消失...a5.gif 这里也比较简单, Toolbar添加app:layout_scrollFlags="scroll" 主体NestedScrollView添加app:layout_behavior="@string
--NestedScrollView 里面只能包裹一个大的布局, 当这个布局长度超出手机展示的部分就可以滚动,其中overScrollMode="never"...的意思是隐藏掉滚动条到顶部和底部时的水波纹--> NestedScrollView...修改的地方也比较简单,这里就不贴代码了。 ? ? 上图中红线框中的布局就是下拉刷新布局。...我也修改了上面的温度的布局,让它居中 ? 然后在MainActivity里面 ?...这是第十篇文章,有好的想法我会一直更新这个APP的,当然文章也会一直更新下去,虽然只是一些小功能,但是积少成多呀。 下一篇:Android 天气APP(十一)未来七天的天气预报、逐小时预报、UI优化
按分析的view结构直接实现 可见,在tabLayout是吸顶状态,无法继续滑动内层RecyclerView(抬起手指继续滑也不行)。(点击查看相关代码) 那么该咋办呢?...NestedScrollView嵌套RecyclerView 参考这篇实名反对《阿里巴巴Android开发手册》中NestedScrollView嵌套RecyclerView的用法。...从此篇文章分析结论得知,NestedScrollView嵌套RecyclerView虽然可以实现效果,但是RecyclerView会瞬间加载所有item,RecyclerView失去的view回收的特性...onNestedPreScroll中的具体处理,请看代码,有详细注释。要结合滑动实际情况去理解,便于遇到其他情况也能同样处理。...demo截图 有帮助的话Star一波吧。
如果标题可用的话 显示的标题文字 11.android.support.design:titleEnabled e.g. app:titleEnabled="true" Whether the...一个问题NestedScrollView高度加上顶部AppBarLayout高度没超过屏幕高低滑动有问题(只能在AppBarLayout范围内才能滑动); 滚动时,CollapsingToolbarLayout中的View(比如ImageView)也可以同时滚动,实现视差滚动效果,通常和layout_collapseParallaxMultiplier...然后里面的NestedScrollView这货。 它和scrollview 基本上一样 但是它支持嵌套滚动 嵌套滚动默认是启用的。...定义滚动视图是否应该伸展它的内容来填补视窗。
嗨,我是哈利迪~最近有个bug排查了好几天,就是有个老页面因业务复杂度,使用了NestedScrollView+tab+多Fragment的结构(各Fragment里有RecyclerView,即存在嵌套滑动...他把比较新的androidx.fragment、lifecycle和annotation给拉过来了,导致androidx.core也从1.0.0变成了1.1.0,查阅core版本发布,在1.1.0的变更里有一行...: 添加了嵌套滚动改进;请参阅 NestedScrollingChild3 和 NestedScrollingParent3。...NestedScrollingParent3,NestedScrollingChild3, ScrollingView {} 可见,有两个接口从v2变成了v3,NestedScrollView...同时,引入了unConsumed值可以向彼此传递剩余距离,rv未消费完的距离,还可以交给nsv继续消费。
在 RecyclerView 或其他类似 NestedScrollView 这样的可以嵌套滚动的 View 中加入 app:layout_behavior。...在用户滑动时,标题的高度也可以改变。 ?...Persistent 形式的底部表 有两种方法来创建 Persistent 形式的底部表。第一种是用 NestedScrollView,然后就简单地将内容嵌到里面。...将你的内容包含在 NestedScrollView 中,然后在其上添加 app:layout_behavior 就会使你的滚动行为预期工作。...滚动事件不会响应其他任何布局。 使用 CoordinatorLayout 时出错的方式有很多种,当你发现出错时可以在这里添加提示。
在ConstraintLayout2.x中,有两种方式来实现嵌套滚动布局。...这种方案的布局结构如下: CoordinatorLayout --------AppBarLayout ----------------MotionLayout --------NestedScrollView...addOnOffsetChangedListener(this) } } ❝这两种方式没有本质上的不同,但是对于MotionEditor来说,如果使用自定义的MotionLayout,在非根布局下创建约束的时候会有一些问题(修改属性也会存在一些问题...MotionLayout --------MotionLayout --------NestedScrollView 我们可以发现,这里有两层MotionLayout,外层的MotionLayout,用于控制头部的伸缩布局...,设计思路不可谓不精,一旦你熟练掌握了MotionLayout的各种基础布局,那么即使再复杂的布局,也能分而治之。
嗨,我是哈利迪~最近有个bug排查了好几天,就是有个老页面因业务复杂度,使用了NestedScrollView+tab+多Fragment的结构(各Fragment里有RecyclerView,即存在嵌套滑动...他把比较新的androidx.fragment、lifecycle和annotation给拉过来了,导致androidx.core也从1.0.0变成了1.1.0,查阅core版本发布,在1.1.0的变更里有一行...: 添加了嵌套滚动改进;请参阅 NestedScrollingChild3 和 NestedScrollingParent3。...NestedScrollingParent3,NestedScrollingChild3, ScrollingView {} 可见,有两个接口从v2变成了v3,NestedScrollView类本身的实现也有一些改动...同时,引入了unConsumed值可以向彼此传递剩余距离,rv未消费完的距离,还可以交给nsv继续消费。
目前这个框架提供了几种不用写动画代码就能工作的方法,这些效果包括: 让浮动操作按钮上下滑动,为Snackbar留出空间 ? 扩展或者缩小Toolbar或者头部,让主内容区域有更多的空间。 ?...在RecyclerView或者任意支持嵌套滚动的view比如NestedScrollView上添加app:layout_behavior。...可以使用的其他flag有: enterAlways: 一旦向上滚动这个view就可见。 ?...同时在用户滚动的时候title的高度也会随着改变。 ? 为了制造出这种效果,我们添加一个定义了app:layout_collapseMode=”parallax” 属性的ImageView。...当滚动发生的时候,CoordinatorLayout会尝试触发那些声明了依赖的子view。
预取机制,就是在滑动过程中,会把将要展示的一个元素提前缓存到mCachedViews中,所以滑动10个元素的时候,第11个元素也会被创建,也就多走了一次bindview方法。...之前说过解决滑动冲突的办法有两种:「内部拦截法和外部拦截法」。这里我提供一种内部拦截法,还有一些其他的办法大家可以自己思考下。...还有一个办法就是用Nestedscrollview代替ScrollView,Nestedscrollview是官方为了解决滑动冲突问题而设计的新的View。...所以直接替换成Nestedscrollview就能保证两者都能正常滑动了。...也就是说当它嵌套在NestedScrollView中时,默认会随着NestedScrollView滚动而滚动,放弃了自己的滚动。所以给我们的感觉就是滞留、卡顿。
领取专属 10元无门槛券
手把手带您无忧上云