## [MultiType-Adapter](https://github.com/LidongWen/MultiTypeAdapter)打造悬浮吸顶效果 配合RecyclerView快速打造一款 展示UI 悬浮吸顶效果,如 通讯录效果,时光轴效果等等,且支持触摸事件。 **文章地址:[戳我!](http://www.jianshu.com/p/032a6773620b)** [MultiType-Adapter](https://github.com/LidongWen/MultiTypeAdapter) 是一款轻量级支持多数据类型的 RecyclerView 适配器; 使用简单,完全解耦; ----- 悬浮吸顶功能分为两种模式,一种是自己添加布局作为头部,另一种则是从原有itemView中选取任意itemVIew作为悬浮头部布局; - [总览](https://github.com/LidongWen/MultiTypeAdapter) - [特性](https://github.com/LidongWen/MultiTypeAdapter) - [基础用法](https://github.com/LidongWen/MultiTypeAdapter) - [单数据](https://github.com/LidongWen/MultiTypeAdapter) - [多数据-多类型](https://github.com/LidongWen/MultiTypeAdapter) - [单类型-多数据](https://github.com/LidongWen/MultiTypeAdapter) - [事件](https://github.com/LidongWen/MultiTypeAdapter) - [高级用法](https://github.com/LidongWen/MultiTypeAdapter) - [网格布局与线性布局混合编排](https://github.com/LidongWen/MultiTypeAdapter) - [瀑布流布局](https://github.com/LidongWen/MultiTypeAdapter) - [上拉加载](https://github.com/LidongWen/MultiTypeAdapter) - [无数据时过度界面设置](https://github.com/LidongWen/MultiTypeAdapter) - [混合布局拖拽实现](https://github.com/LidongWen/MultiTypeAdapter) - 吸顶效果 - [设置复用数量](https://github.com/LidongWen/MultiTypeAdapter) - [扩展](https://github.com/LidongWen/MultiTypeAdapter) - [Thrank](https://github.com/LidongWen/MultiTypeAdapter) - [一些说明](https://github.com/LidongWen/MultiTypeAdapter) # 悬浮吸顶效果 ``` ```groovy // root build.gradle repositories { jcenter() maven { url "https://www.jitpack.io" } } // yout project build.gradle dependencies { compile 'com.github.LidongWen:MultiTypeAdapter:0.1.1' } ``` # 使用 类型1 定义一个Adapter ``` class StickySigleTwoAdapter extends MultiTypeAdapter implements StickyHeaderAdapter { @Override public boolean isHeader(int position) { if (position == 0 || position == 8 || position == 15|| position == 21|| position == 28) { return true; } else return false; } } ``` 使用 ``` adapter = new StickySigleTwoAdapter(); RecyclerView recyclerView = (RecyclerView) findViewById(R.id.rlv_multidata); recyclerView.setNestedScrollingEnabled(false); adapter.register(String.class, new ItemVIewNormal()); adapter.register(Bean01.class, new ItemVIew01()); adapter.register(Bean02.class, new ItemVIew02()); adapter.register(Bean03.class, new ItemVIew03()); recyclerView.setAdapter(adapter); StickyControl.anyHeader2() .adapter(adapter) .setRecyclerView(recyclerView) // .immersion() .togo(); ``` # 使用 模式2 在内容itemView中选取悬浮 头部;下面这种效果 ``` public class StickySigleTwoAdapter extends StickyAnyAdapter { public StickySigleTwoAdapter(Context context, RecyclerView.Adapter mAdapter) { super(context, mAdapter); } @Override public boolean isHeader(int position) { //选取悬浮item if (position == 0 || position == 8 || position == 14|| position == 20 || position == 28|| position == 32) { return true; } else return false; } } ``` activity ``` stickyTestAdapter = new StickySigleTwoAdapter(this, adapter); recyclerView.setAdapter(stickyTestAdapter); StickyControl.any() .adapter(stickyTestAdapter) .setRecyclerView(recyclerView) // .immersion() .togo(); ``` # 使用模式3 将布局放入 StickyNestedScrollView 中 ,并将 需要黏贴的头部的view 设置 tag属性为 "sticky" "-nonconstant" "-hastransparency"中的任意属性 ``` ``` # 使用 类型4 添加自顶布局作为头部, 添加分组 **1、 自定义一个 StickyAdapter** 在这里你可以设置 header 布局,header的位置 ``` public class StickySigleTwoAdapter extends StickyAdapter { public StickySigleTwoAdapter(Context context, RecyclerView.Adapter mAdapter) { super(context, mAdapter); } @Override public boolean isHeader(int position) { if (position == 0 || position == 8 || position == 14|| position == 20 || position == 28|| position == 32) { return true; } else return false; } @Override public void onBindHeaderViewHolder(final ViewHolder viewholder, final int position) { } @Override protected int getLayoutId() { return R.layout.header_two; } } ``` **2、在activity中设置** ``` //将 adapter 包裹进 StickyAdapter // setAdapter //配置生效 stickyTestAdapter = new StickySigleTwoAdapter(this, adapter); recyclerView.setAdapter(stickyTestAdapter); StickyControl.single() // 设置单个 .adapter(stickyTestAdapter) // .setRecyclerView(recyclerView) .immersion() // 是否嵌入 .togo(); ``` 三种方式优缺点: 模式 | recyclerView | anyView | 优点 | 不足 | 使用场景 --- | --- | --- | --- | --- | --- mode 1 | ✔ | ✘ | 准确黏贴头部,支持glide等图片加载框架 | 开启复用 位置会变化 | 大数据量时,使用 LinearLayoutManager时 。比如说通讯录头部 mode 2 | ✔ | ✘ | 准确黏贴头部 | 不支持glide等图片加载框架 | ,头部图片是取本地(非gilde等图片加载) mode 3 | ✔ | ✔ | 支持任意view,准确黏贴头部 | 不支持recyclerView复用,不支持黏贴布局根布局是ImageView时使用glide等加载框架 | 小数据量,平常布局 mode 2 | ✔ | ✘ | 准确黏贴头部,准确黏贴头部 | 不支持recyclerView复用,否则失效 | 这个厉害了,布局头部大小不做限定的时候 **第一种复用方面有致命的问题。recyclerview中推荐使用第二种和四种方式。 scrollerview当中推荐使用第三种 ,鉴于黏贴头部这块事件比较多样性,后面我会将黏贴部分抽出来 不再放入包中。** **文章地址:[戳我!](http://www.jianshu.com/p/032a6773620b)** **代码传送门:[戳我!!!](https://github.com/LidongWen/MultiTypeAdapter)** ----- 希望我的文章不会误导在观看的你,如果有异议的地方欢迎讨论和指正。 如果能给观看的你带来收获,那就是最好不过了。 ##### 人生得意须尽欢, 桃花坞里桃花庵