五行代码实现 炫动滑动 卡片层叠布局,仿探探、人人影视订阅界面 简单&优雅:layoutmanager+itemtouchhelper

五行代码实现 炫动滑动 卡片层叠布局,仿探探、人人影视订阅界面 简单&优雅:layoutmanager+itemtouchhelper

ID:36286006

大小:564.50 KB

页数:13页

时间:2019-05-08

五行代码实现 炫动滑动 卡片层叠布局,仿探探、人人影视订阅界面 简单&优雅:layoutmanager+itemtouchhelper_第1页
五行代码实现 炫动滑动 卡片层叠布局,仿探探、人人影视订阅界面 简单&优雅:layoutmanager+itemtouchhelper_第2页
五行代码实现 炫动滑动 卡片层叠布局,仿探探、人人影视订阅界面 简单&优雅:layoutmanager+itemtouchhelper_第3页
五行代码实现 炫动滑动 卡片层叠布局,仿探探、人人影视订阅界面 简单&优雅:layoutmanager+itemtouchhelper_第4页
五行代码实现 炫动滑动 卡片层叠布局,仿探探、人人影视订阅界面 简单&优雅:layoutmanager+itemtouchhelper_第5页
资源描述:

《五行代码实现 炫动滑动 卡片层叠布局,仿探探、人人影视订阅界面 简单&优雅:layoutmanager+itemtouchhelper》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、五行代码实现炫动滑动卡片层叠布局,仿探探、人人影视订阅界面简单&优雅:LayoutManager+ItemTouchHelper概述前几天看有人实现了仿人人美剧的订阅界面,不过在细节之处以及实现方式我个人认为都不是最佳的姿势。于是我也动手撸了一个,还顺带撸了个探探的界面,先看GIF:这里吐个槽,探探这种设计真的像皇帝翻牌子的感觉,不喜欢左滑,喜欢右滑。人人影视版特点(需求):动画:最多可见的这四层,在顶层卡片滑动时,每一层都会位移&放大动画,有种补充到顶层的感觉。动画:松手时,如果未被判定为删除,则会有顶层以下每一层卡片收缩回原位的

2、动画。无限循环:模仿人人影视,顶层卡片被删除后,补充到最底层。除上述动画特点,探探版特点(需求):Roate的变化:左右滑动时,顶层卡片会慢慢旋转,到阈值max大概十五度。Alpha的变化:左滑时顶层卡片的删除按钮会慢慢显现,右滑时爱心按钮会慢慢显现。显然,松手时,以上动画也需要复位。我们的效果,基本上和原版一致了,写起来怎么样呢?我不是标题党,如标题所说:简单:思路简单清晰易理解优雅:性能没有任何隐患,LayoutManager只会加载显示屏幕上可见的数量的View。快速:利用ItemTouchHelper处理拖拽&滑动删除逻辑,

3、核心代码不超过50行。且经过封装,四行代码就可以用。伸手党福利:如果懒得看这么多文字只想用,直接移步gayhub,gradle导入相关文件or复制。然后如下,搞定。mRv.setLayoutManager(newOverLayCardLayoutManager());CardConfig.initConfig(this);ItemTouchHelper.Callbackcallback=newRenRenCallback(mRv,mAdapter,mDatas);ItemTouchHelperitemTouchHelper=newI

4、temTouchHelper(callback);itemTouchHelper.attachToRecyclerView(mRv);而且我将一些参数都以变量形式计算,这样就做到了可配置,假如老板让你一开始多显示几层卡片,例如6层,你只需要修改一个参数即可,效果如图:正确的姿势正确的姿势就是:利用LayoutManager实现卡片层叠布局,值得注意的是,只layout出界面上可能会看见的那些View。搭配ItemTouchHelper,它本身实现了拖拽&滑动删除逻辑,我们只需要在onChildDraw()中绘制动画和onSwiped

5、()中处理数据集(循环or删除)。但是即便如此,还是有一个唯一的注意事项。我们只layout出界面上可能会看见的那些View即可。因为考虑到动画,所以是可能会看见。我们看人人美剧的界面:初始化时,界面上可见三个View,我们分别起名:TopView,Top-1View,Top-2View。其中TopView完全可见,Top-1View,Top-2View只有下边缘可见。如文首GIF,滑动TopView时,Top-1View,Top-2View开始慢慢放大,并且向上位移,直至填充至它们各自上层的View。这时候露出了Top-3View

6、。所以我们在书写LayoutManager的onLayoutChildren()方法时,只要layout出当前数据集最后四个View即可。前文提到的参数配置如下:包括一些配置界面最多显示几个View每一级View之间的Scale差异、translationY等等publicclassCardConfig{//屏幕上最多同时显示几个ItempublicstaticintMAX_SHOW_COUNT;//每一级Scale相差0.05f,translationY相差7dp左右publicstaticfloatSCALE_GAP;publi

7、cstaticintTRANS_Y_GAP;publicstaticvoidinitConfig(Contextcontext){MAX_SHOW_COUNT=6;SCALE_GAP=0.05f;TRANS_Y_GAP=(int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,15,context.getResources().getDisplayMetrics());}}LayoutManager全部代码如下,布满注释,如果看不懂,建议阅读前置文章LayoutManger

8、系列:publicclassOverLayCardLayoutManagerextendsRecyclerView.LayoutManager{@OverridepublicRecyclerView.LayoutParamsgener

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。