专栏首页lzj_learn_noteRecyclerView的一些开源LayoutManager

RecyclerView的一些开源LayoutManager

Google默认为RecyclerView提供了LinearLayoutManager、StaggeredGridLayoutManager、GridLayoutManager,已经可以满足很多开发需求了,但是实际开发过程中,免不了出现一些更加新颖的交互设计。下面是收集的一些自定义的LayoutManager。

FanLayoutManager

Github源码地址:[https://github.com/Cleveroad/FanLayoutManager(https://github.com/Cleveroad/FanLayoutManager)

CarouselLayoutManager

Github源码地址:https://github.com/Azoft/CarouselLayoutManager

ChipsLayoutManager

Github源码地址:https://github.com/BelooS/ChipsLayoutManager 一种流式布局的效果,很像我们平时看到的标签云。

HiveLayoutManager

Github源码地址:https://github.com/Chacojack/HiveLayoutManager 一个蜂巢布局管理器

vlayout

Github源码地址:https://github.com/alibaba/vlayout vlayout 是手机天猫 Android 版内广泛使用的一个基础 UI 框架项目,提供了一个用于 RecyclerView 的自定义的 LayoutManger,可以实现不同布局格式的混排,也是 Tangram 框架的基础模块。

flexbox-layout

Github源码地址:https://github.com/google/flexbox-layout flexbox-layout是Google开源的布局,其效果是实现类似CSS中的Flexbox布局效果( 具体可看:https://www.w3cplus.com/css3/a-guide-to-flexbox-new.html ),原本并不支持RecyclerView,但其最新的Alpha版本已经开始推出FlexboxLayoutManager用于支持RecyclerView实现效果。

LondonEyeLayoutManager

Github源码地址:https://github.com/danylovolokh/LondonEyeLayoutManager 一个环形菜单的布局管理器

ZLayoutManager

Github源码地址:https://github.com/mcxtzhang/ZLayoutManager 仿探探、人人影视 卡片层叠 炫动滑动布局

GalleryLayoutManager

Github源码地址:[https://github.com/BCsl/GalleryLayoutManager] 使用自定义 LayoutManager 实现 Android 中 Gallery 或者 ViewPager 控件的效果,支持垂直和水平两个方向,支持 RecycleView 的试图回收机制

CustomLayoutManager

圆弧

缩放

圆弧+缩放

画廊

用法 在build.gradle中添加

compile 'rouchuan.customlayoutmanager:customlayoutmanager:1.0.1'

然后新建layoutManager并继承CustomLayoutManager,CustomLayoutManager有几个默认的属性是可以直接使用的。

protected Context context;
//子view的宽度 
protected int mDecoratedChildWidth;
//子view的高度
protected int mDecoratedChildHeight;
//子view距离屏幕最左的偏移,也可以理解为第一个子view在初始状态下距离屏幕左侧的位移,默认居中
protected int startLeft; 
//子view距离屏幕顶部的位移,默认居中
protected int startTop; 
//主要随滑动所改变的属性的偏移量,考虑到view的属性有int,有float所以这边统一用float表示偏移
protected float offset;  
//相邻两个子view间,主要随滑动而改变的属性的差值(比如随滑动改变的是view的角度,那么这个值就是各个view之间的角度间隔)
protected float interval;

继承CustomLayoutManager之后必须实现3个方法

public class MyLayoutManager extends CustomLayoutManager{

    //默认isClockWise为true
    public MyLayoutManager(Context context) {
        super(context);
    }

    //isClockWise为true时从左往右排列,不然则从右往左排列
    public MyLayoutManager(Context context, boolean isClockWise) {
        super(context, isClockWise);
    }

   //这个方法会设置默认的interval变量,之后可以直接使用interval
    @Override
    protected float setInterval() {
        return 0;
    }

   //初始化方法,你可以在这里初始化自己的一些参数,比如实现圆弧布局的半径,或是更改一些默认的属性,比如startLeft,startTop
    @Override
    protected void setUp() {

    }

   //itemView就是每一个子view,targetOffset就是其对应的将要改变到的属性值,你可以在这里根据targetOffset对子view的一些属性进行设置
    @Override
    protected void setItemViewProperty(View itemView, float targetOffset) {

    }
}

此外还有6个可以选择重写的方法

//当子view的属性超过这个值时,就会被回收掉
@Override
protected float maxRemoveOffset() {
    return getHorizontalSpace() - startLeft;
}

//当子view的属性小于这个值时,就会被回收掉
@Override
protected float minRemoveOffset() {
    return -mDecoratedChildWidth-getPaddingLeft() - startLeft;
}

//当view的属性等于targetOffset时,此view基于初始位置的x坐标,一般返回targetOffset
@Override
protected int calItemLeftPosition(float targetOffset) {
    return targetOffset;
}

//当view的属性等于targetOffset时,此view基于初始位置的y坐标,一般返回0
@Override
protected int calItemTopPosition(float targetOffset) {
    return 0;
}

//这边返回在滚动时子view主要改变的属性的值
@Override
protected float propertyChangeWhenScroll(View itemView) {
    return itemView.getLeft()-startLeft;
}

//滑动产生的偏移dx与offset的比例,默认为1
protected float getDistanceRatio(){
    return 1f;
}

最后

本文部分转至:关于Android RecyclerView的那些开源LayoutManager

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Android ImageSpan与TextView同一行图片居中

    在开发中常常会遇到标签(图片)+文字的需求,实现方式一般采用SpannableString的方式来实现。 这时候会遇到图片ImageSpan没有办法居中的问题。...

    用户3106371
  • 阿里ARouter使用及源码解析(一)

    在app的开发中,页面之间的相互跳转是最基本常用的功能。在Android中的跳转一般通过显式intent和隐式intent两种方式实现的,而Android的原生...

    用户3106371
  • 5-遍历、公共方法、引用

    通过for ... in ...:的语法结构,可以遍历字符串、列表、元组、字典,集合等数据结构。

    用户3106371
  • 资源 | 正则表达式的功法大全,做NLP再也不怕搞不定字符串了

    正则表达式(regex 或 regexp)对于从文本中抽取信息极其有用,它一般会搜索匹配特定模式的语句,而这种模式及具体的 ASCII 序列或 Unicode ...

    机器之心
  • 资源 | 正则表达式的功法大全

    正则表达式(regex 或 regexp)对于从文本中抽取信息极其有用,它一般会搜索匹配特定模式的语句,而这种模式及具体的 ASCII 序列或 Unicode ...

    昱良
  • 经典回顾!Github 上打星超过 1 万的可复现顶会论文项目

    AI 科技评论按:Zaur Fataliyev 是在 LG 电子的一名机器学习工程师,为了方便大家对带有复现代码的经典顶会论文进行查询,他在 GitHub 上将...

    abs_zero
  • 算法最热,arXiv论文接收率高一倍,Rebuttal真能改分,NeurIPS 2019最全报告+视频+笔记都在这里了

    盛大的 NeurIPS 2019 刚刚落幕。今年,NeurIPS 官方总结了大会达投稿情况,并介绍了评审委员会在保证投稿质量、完善投稿机制上的种种探索。与此同时...

    机器之心
  • 推荐几个高质量图片网站,再也不怕没图装X了

    Unsplash是一个免费高质量照片的网站,照片都是真实的摄影,照片分辨率也很大,全是生活中的景象作品,清新的生活气息图片可以作为桌面壁纸,也可以应用于文章配图...

    KEN DO EVERTHING
  • 经典回顾!Github 上打星超过 1 万的可复现顶会论文项目

    AI 科技评论按:Zaur Fataliyev 是在 LG 电子的一名机器学习工程师,为了方便大家对带有复现代码的经典顶会论文进行查询,他在 GitHub 上将...

    AI科技评论
  • 经典回顾!Github 上打星超过 1 万的可复现顶会论文项目

    AI 科技评论按:Zaur Fataliyev 是在 LG 电子的一名机器学习工程师,为了方便大家对带有复现代码的经典顶会论文进行查询,他在 GitHub 上将...

    AI研习社

扫码关注云+社区

领取腾讯云代金券