欢迎来到天天文库
浏览记录
ID:36286006
大小:564.50 KB
页数:13页
时间:2019-05-08
《五行代码实现 炫动滑动 卡片层叠布局,仿探探、人人影视订阅界面 简单&优雅: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
此文档下载收益归作者所有