自定义LayoutManager实现弧形、滑动、画廊效果

github地址(完整Demo)
https://github.com/zhouxu88/CustomLayoutManager

最近浏览github,发现了一个特别炫酷的效果,可以用来让你的APP逼格更高,特此和大家分享一下。

效果图

自定义LayoutManager.gif

自定义customLayoutManager会帮你处理一部分放置、回收、以及滚动的逻辑,你只需关注你想随着滚动改变的属性,他是如何改变的,以及达到哪个值时会被回收即可。所以我们只需要新建一个自己的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之后你必须实现这几个方法

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;
}

参考:
https://github.com/leochuan/CustomLayoutManager

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,386评论 25 707
  • 可以实现多种样式的跑马灯,跑马灯的背景是基于颜色过渡view做的,可以设置任何颜色,还可以为跑马灯绑定点击事件 可...
    petter102阅读 618评论 0 1
  • 昨天晚上,大羊在朋友圈发了一条动态说,今日去四顶山观猛禽未果,准备明早五点半出发再去一次,可有同行的? 一看四顶山...
    懒小俊阅读 955评论 0 4
  • 1.它等待我出生,然后又等待我活到最狂妄的年龄上忽地残废了双腿。四百多年里,它一面剥蚀了古殿檐头浮夸的琉璃,淡褪了...
    酸酸121阅读 1,790评论 0 5