Android 中RecyclerView顶部刷新实现详解 1. RecyclerView顶部刷新的原理 RecyclerView顶部刷新的实现通常都是在RecyclerView外部再包裹一层布局。...也就是说,外层布局中包含两个child,一个顶部刷新View,一个RecyclerView,顶部刷新View默认是隐藏不可见的。...在外层布局中对滑动事件进行处理,当RecyclerView滑动到顶部并继续下滑的时候,根据滑动的距离决定顶部刷新View的显示。当滑动距离超过某个设定的值的时候,执行顶部刷新操作。 2....setOnRefreshListener()方法用来设置顶部刷新事件的监听,当需要执行顶部刷新时会调用此listener的onRefresh()方法,来获取最新的数据。...setRefreshing()方法用来设置顶部刷新状态。当数据获取完成后,需要调用此方法表示刷新完成。
测量RecyclerView内容高度实现 这种方式很直观,我们先获取RecyclerView控件的高度h1,设置完数据后再获取RecyclerView的内容高度h2,然后将h1与h2进行比较: ①如果h1...我们在RecyclerView控件的上方,盖一个布局,这个悬浮布局的实现要和Adapter中的Footer布局实现一样。 具体实现方式 接着我们看下如何实现。...具体分为如下几个步骤: ①将RecyclerView的父布局修改为RelativeLayouot,在RelativeLayouot的底部、RecyclerView的上方添加一个Footer布局。...②让Adapter支持两种布局,普通Item和Footer布局 ③在给RecyclerView设置完数据后,获取RecyclerView的控件高度h1和RecyclerView的内容高度h2 ④如果h1...当某个Item的底部与RecyclerView的底部重叠时,lastView跟lastVisibleView就是同一个了,具体如下图: ?
和RecyclerView结合实现下拉刷新,以及RecyclerView的数据适配器RecyclerView.Adapter的用法,还有RecyclerView中item的点击事件的实现方法; 卡片式CardView...,请看博文《Android L+ Theme 与 Toolbar 实例》。...scroll: 所有想滚动出屏幕的view都需要设置这个flag- 没有设置这个flag的view将被固定在屏幕顶部。...enterAlwaysCollapsed: 当你的视图已经设置minHeight属性又使用此标志时,你的视图只能以最小高度进入,只有当滚动视图到达顶部时才扩大到完整高度。...app:cardPreventCornerOverlap : 在v20和之前的版本中添加内边距, 这个属性是为了防止卡片内容和边角的重叠
当我们引入RecyclerView的时候,恰好是压死骆驼的最后一根稻草,故不得不采用其他方案来代替RecyclerView 和 CollapsingToolbarLayout实现的折叠效果。...android:fitsSystemWindows,经本人代码测试,表示CollapsingToolbarLayout的上边界是否扩展到statusbar,这里如果想使用透明的statusbar,这里更新下应该该布局的根布局的该属性为...true,不过这里兼容性还是存在问题的,特别是android 4.4版本的折叠布局的透明statusbar,不知道改为有没更好的方式。...enterAlwaysCollapsed - 当你的View已经设置minHeight属性又使用此标志时,你的View只能以最小高度进入,只有当滚动视图到达顶部时才扩大到完整高度。...题外话3 23.2.0中在CoordinatorLayout中使用Toolbar ,toolbar无法与顶部对齐,即顶部存在垂直间距。
VLayout是什么,说白了就是用一个原生RecycelerView加上VLayout来实现在一个页面上比较复杂的布局并且有一个比较好的复用,在RecyclerView里同时有GridLayout布局,.../宽度 FixLayoutHelper: 固定布局,始终在屏幕固定位置显示 ScrollFixLayoutHelper: 固定布局,但之后当页面滑动到该图片区域才显示, 可以用来做返回顶部或其他书签等...LinearLayoutHelper(); //设置间隔高度 linearLayoutHelper.setDividerHeight(5); //设置布局底部与下个布局的间隔...img5.PNG ScrollFixLayoutHelper继承自FixLayoutHelper,不同的是showType来决定这个布局的Item是否显示,可以用来做一些返回顶部之类的按钮, SHOW_ALWAYS...Context context){ OnePlusNLayoutHelper onePlusNLayoutHelper=new OnePlusNLayoutHelper(); //设置布局底部与下个布局的间隔
重叠,所以看起来矩形就消失了 ?...如下图: 此现象称为onDraw()的 OverDraw现象 ?...从而获得与ItemView不重叠的绘制区域 ?...区域 // 获取RecyclerView的Child view的个数 final int childCount = parent.getChildCount(); // 设置布局参数...,如蒙层、重叠内容等等 2.3.4 实例讲解 实例说明:在 RecyclerView 上每个 ItemView 上叠加一个角标 ?
京东首页 这是京东的首页,忽略顶部和顶部,大致理解视图结构就是:最外层为多布局的RecyclerView,最后一个item是tabLayout+ViewPager,ViewPager的每个fragment...这是可行的,但是在tabLayout滑动到顶部后,必须抬起手指,重新滑动,内层RecyclerView才能继续滑动。这是为啥呢?...所以按照正常处理滑动冲突的思路处理--当tab没到顶部时,parent拦截事件,tab到顶部时 parent就不拦截事件,但是由于手指没抬起来,所以这一事件序列还是继续给parent,不会到内部RecyclerView...通常我们要自行手动处理的就是RecyclerView作为嵌套滑动子view的情况。NestedScrollView一般直接作为根布局用来解决嵌套滑动。...作者最后建议使用RecyclerView多布局。 但其实在真实应用中,可能 头部 和 列表 的数据来自不同的接口,当列表的数据请求失败时要展示缺省图,但头部还是会展示。
LayoutManager RecyclerView 的 support 包里默认提供了三个 LayoutManager,分别是下列三个,可用于实现大部分场景的布局需求:线性布局、网格布局、瀑布流布局等等...如果 RecyclerView 高度不足以让所有行都显示出来,那么就会出现 item 重叠现象。...这就是在 match_parent 下的表现,至于 wrap_content 则完全根据 item 设定的宽高来考虑了,不会再有自动分配剩余空间或者 Item 重叠之类的工作了。...,也许它并不是处于当前屏的最顶部或最底部,就像上图日志中的 position=7 的 item,它虽然是最后完全可见的 item,但并不是位于最底部,最底部是 6 的 item。...那么,从调用了 notifyDataSetChanged() 到界面刷新这之间就会存在一定的时间差,在这段时间内,数据源与界面呈现的 Item 就不是一致性的了,如果这时候有需要区分实际数据源的 Item
简介 使用RecyclerView实现网格布局,实现手机界面应用列表 效果 效果如下图: ?...详细代码 XML布局文件 在布局中使用RecyclerView控件 activity_main.xml <?xml version="1.0" encoding="utf-8"?...选项单击事件的回调接口 */ public interface OnItemClickListener{ /** * @param view 当前单击的View...(mGridAdapter); 可以设置的一些参数,说明如下: setLayoutManager设置RecyclerView布局样式 GridLayoutManager:网格布局 LinearLayoutManager...OnItemClickListener()接口,定义RecyclerView选项单击事件的回调接口。
对象 RecyclerView recyclerView = (RecyclerView)findViewById(R.id.recycler_view); // 创建线性布局管理器...; import demo.turing.com.materialdesignwidget.recyclerView.model.SampleModel; /** * 不采用分隔线, 在Item的布局中...); } 为RecyclerView添加item的点击事件 方法一:利用回调的方式实现(不太完善,仍可实现) 实现步骤如下: 在adapter类中,定义接口,接口中定义两个方法分别对应click...{ // 单击事件 void onItemClick(View view ,int position); // 长按触发的事件 void...对象 RecyclerView recyclerView = (RecyclerView)findViewById(R.id.recycler_view); // 创建线性布局管理器
RecyclerView 的自定义的 LayoutManger,可以实现不同布局格式的混排,也是 Tangram 框架的基础模块。...CSS中的Flexbox布局效果( 具体可看:https://www.w3cplus.com/css3/a-guide-to-flexbox-new.html ),原本并不支持RecyclerView,...; //子view距离屏幕最左的偏移,也可以理解为第一个子view在初始状态下距离屏幕左侧的位移,默认居中 protected int startLeft; //子view距离屏幕顶部的位移,默认居中...() - startLeft; } //当view的属性等于targetOffset时,此view基于初始位置的x坐标,一般返回targetOffset @Override protected int...itemView.getLeft()-startLeft; } //滑动产生的偏移dx与offset的比例,默认为1 protected float getDistanceRatio(){
在开发中常常使用到刷新分页,这里实现一个 RecyclerView 的简单的刷新分页操作,测试效果见文末,实现过程参考如下: 实现思路 加载更多数据使用到 RecyclerView 加载多种布局,根据...Item 的位置,当然了这里使用的是布局管理器是 LinearLayoutManager ,这样查找屏幕上第一个可见的 Item 就显得容易多了,下面介绍一些 LinearLayoutManager...</LinearLayout Item布局 /**item.xml**/ <?...根据不同的 ViewType 加载多种布局的用法,使用时根据不同的布局创建不同的 ViewHolder , 然后根据不同的 Viewholder 为对应的 Item 添加数据,注意 getItemViewType...选项单击事件的回调接口 */ public interface OnItemClickListener{ //参数(父组件,当前单击的View,单击的View的位置,数据) void onItemClick
- implementation 'com.android.support:recyclerview-v7:26.1.0' 如果只是用到recyclerview控件优先选用此依赖方式 - implementation...使用 recyclerview的布局管理器有三种分别是线性布局管理器(LinearLayoutManager);表格布局管理器(GridLayoutManager);瀑布流布局管理器(StaggeredGridLayoutManager...,我们这里用不到其中的一个onDrawOver):第一个getItemOffsets()此方法是针对每一个 ItemView,实际上RecyclerView 中的 ItemView 外面会包裹着一个矩形...当outRect的左,右,上,下的内容都为0时,itemview和ontRect重叠你感觉只有一个item.类似: ?...image.png 其目的是控制矩形(outRect)与 ItemView的间隔,部分代码如下: ?
我们在创建Activity的时候选择此模板,然后就会出现如下的效果 相关代码 <?...都需要设置这个flag, 没有设置这个flag的view将被固定在屏幕顶部。...exitUntilCollapsed:当你定义了一个minHeight,此布局将在滚动到达这个最小高度的时候折叠。 snap:当一个滚动事件结束,如果视图是部分可见的,那么它将被滚动到收缩或展开。...pin:CollapsingToolbarLayout折叠后,此布局将固定在顶部。 parallax:CollapsingToolbarLayout折叠时,此布局也会有视差折叠效果。...AppBarLayout.ScrollingViewBehavior描述了RecyclerView与AppBarLayout之间的依赖关系。
recyclerView.scrollToPosition(position); recyclerView.smoothScrollToPosition(position); 因为我的效果是想要指定的position...滑动到窗口最顶部,但实际效果却不是这样的。...()) { recyclerView.scrollBy(0, recyclerView.getChildAt(n).getTop()); //滚动到顶部 }...public static final int SNAP_TO_END = 1; public static final int SNAP_TO_ANY = 0; SNAP_TO_START使子视图的左侧或顶部与父视图的左侧或顶部对齐...SNAP_TO_END使子视图的右侧或底部与父视图的右侧面或底部对齐。 SNAP_TO_ANY根据子视图的当前位置与父布局的关系,决定子视图是否从头到尾跟随。
,他也是一个布局,和线性布局什么的都一样用,该布局是协调控件之间的联系的。...,LayoutParams是布局参数,textview这个控件是在协调者布局中滑动的,所以,要获取该布局的参数,然后再设置行为。...,往下滑,则返回顶部图标显示,往上滑图标不显示, 原因:在很多段子软件中,会有大量的文字和图片,当用户往下翻的时候,也就是说内容会不断的在上方消失,下面的内容不算的刷新出来,这时右下角出现一个辅助用户回到顶部的按钮...,因为在往上翻时候可能加载的了很多,有些用户就像一步到达顶部,这就出现了滑动监听。...2.1:创建布局文件 外层是协调者布局,中间就是一个类似于listview的RecyclerView,和一个右下角的返回顶部按钮。
2、在23.2.0之前的版本上,RecyclerView会默认充满整个屏幕下方,即使在布局文件中将其高度设置为wrap_content,循环视图依旧霸气地填充到屏幕底部,导致在它后面的其它视图都显示不了了...该问题已明确是RecyclerView兼容包的bug,Android官方在23.2.0及其之后的版本已经修复了,所以如果代码中有用到RecyclerView,需确保build.gradle中的recyclerview-v7...3、当循环视图的列表项已经占满整个屏幕,此时再往顶部添加一条新记录,感觉屏幕没有发生变化,也没看到插入动画。实际上视图顶部确实有添加新记录,把列表项往下拉就能看到,只是循环视图不会自动进行下拉。...4、Android5.0之后如果使用ScrollView嵌套RecyclerView,那么RecyclerView将只显示第一行,后面部分要滑动才会出现,但此时滑动的只有RecyclerView部分而不是整个...--中间补充RecyclerView--> 点此查看Android开发笔记的完整目录
可以清楚看到: 京东:滑动很顺畅,没有停滞的情况,tab到顶部后就 紧接着 滑动内部商品列表了。整个过程手指是连续拖动的,没有抬起。 淘宝:在tab滑到顶部后,手指继续拖动,但商品流是不能滑动的。...所以 按照正常处理滑动冲突的思路处理----当tab没到顶部时,parent拦截事件,tab到顶部时 parent就不拦截事件,但是由于手指没抬起来,所以这一事件序列还是继续给parent,不会到内部RecyclerView...相对的, 向下滑动内部RecyclerView时,如果还能滑就滑内部RecyclerView;如果已经滑到顶部就让parent去滑动外部RecyclerView。...其中mRootList是外部RecyclerView,mChildList是内部RecyclerView,childTop是tab这个view的top 用于判断是否到顶部。...//childTop是tab到顶部的距离。
这是一个City列表,每个City都有所属的Province,需要在滑动的时候,将对应的Province悬浮在顶部。悬浮顶部的Province需要根据列表的滑动而适当改变位置,实现“顶上去”的效果。...实现思路: 利用RecyclerView.ItemDecoration绘制Province(就像绘制分割线一样) 同一组的City,只绘制一个Province 计算偏移,将当前Province固定在顶部...当前Item与上一个Item为同一个分组时,跳过该Item的绘制。...viewBottom可近似认为下个Item的顶部)距离RecyclerView顶部小于top时,偏移当前分组位置。...来个自定义布局?那就来个自定义布局吧。 实现 实现的原理跟上面一样,由于需要自定义布局,所以需要在接口中添加一个获取View的方法。
LayoutManager是布局管理器,制定列表的整体布局。ItemDecoration设置项与项之间的分割线。...它可以实现与ListView和GridView一样的效果,提供了一种插拔式的体验,高度的解耦,异常的灵活,只需设置其提供的不同的LayoutManager,ItemAnimator和ItemDecoration...四、RecycleView的使用方法首先要在build.gradle文件中添加引用compile 'com.android.support:recyclerview-v7:26.1.0'主页面布局:<?...MyHolder : 这是RecyclerView.ViewHolder的实现类,用于初始化item布局中的子控件。需要注意的是,在这个类的构造方法中需要传递item布局的View给父类 。...元素的布局和复用。
领取专属 10元无门槛券
手把手带您无忧上云