先看个效果
这是一个City列表,每个City都有所属的Province,需要在滑动的时候,将对应的Province悬浮在顶部。悬浮顶部的Province需要根据列表的滑动而适当改变位置,实现“顶上去”的效果。
实现思路:
RecyclerView.ItemDecoration绘制Province(就像绘制分割线一样)City,只绘制一个ProvinceProvince固定在顶部
既然是利用RecyclerView.ItemDecoration实现的悬浮效果,那么有必要了解下它。 ItemDecoration字面意思:Item的装饰。是的!是装饰!不只是画分割线。 其实ItemDecoration的功能非常强大,而我们平时只是用它来实现分割线的效果(至少我是这样)。因此,可能很多同学认为ItemDecoration就是用来绘制分割线的。其实不然,ItemDecoration的功能远不止是分割线的绘制。
先看下RecyclerView.ItemDecoration的源码(部分):
public static abstract class ItemDecoration {...public void onDraw(Canvas c, RecyclerView parent, State state) {onDraw(c, parent);}public void onDrawOver(Canvas c, RecyclerView parent, State state) {onDrawOver(c, parent);}public void getItemOffsets(Rect outRect, View view, RecyclerView parent, State state) {getItemOffsets(outRect, ((LayoutParams) view.getLayoutParams()).getViewLayoutPosition(),parent);}}里面是我们常用的三个方法:
getItemOffsets:通过Rect为每个Item设置偏移,用于绘制Decoration。onDraw:通过该方法,在Canvas上绘制内容,在绘制Item之前调用。(如果没有通过getItemOffsets设置偏移的话,Item的内容会将其覆盖)onDrawOver:通过该方法,在Canvas上绘制内容,在Item之后调用。(画的内容会覆盖在item的上层)
RecyclerView 的背景、onDraw绘制的内容、Item、onDrawOver绘制的内容,各层级关系如下:
Android 仿饿了么点餐页面源码
Android后台模拟点击探索源码
android证件拍照及裁剪源码
一个MVP架构的Android快速开发框架
安卓QRCode扫描二维码,扫描条形码,相册获取图片后识别,生成带
Android快速实现新手引导层的库
一个非常不错的Android智能下拉刷新框架-SmartRefreshLayout
Android开发实现漂亮的的交互效果源码
用于Java的快速JSON解析器/生成器Fastjson
Android开发商品属性筛选、商品筛选功能
android实现将app隐藏加密功能的源码
android文件下载管理demo源码
云翻译打造一个码农专用的开源翻译工具
热门源码