关于SmartSwipe
侧滑就选智能侧滑,弹性侧滑、滑动抽屉、下拉刷新、侧滑返回以及侧滑删除等你想到和没想到的,通通搞定。
库 | smart-swipe | smart-swipe-x | smart-swipe-support |
---|---|---|---|
最新版 |
为了便于使用,SmartSwipe
中还封装了以下工具类:
- SmartSwipeBack:
- 全局只需一行代码即可搞定所有Activity侧滑返回
- 可选样式:开门、百叶窗、仿微信、仿QQ及仿MIUI贝塞尔曲线
- 无需透明主题
- 无需继承某个特定的Activity
- 不需要侵入xml布局文件
- 也不需要侵入BaseActivity
- 支持全屏侧滑和(/或)边缘侧滑返回
- 支持 上/下/左/右 4个方向侧滑返回
- SmartSwipeRefresh:
- 一行代码实现下拉刷新和加载更多
- 支持纵向和横向
- 支持自定义刷新控件(跟scwang90/SmartRefreshLayout的自定义刷新控件一样简单,但比它更轻量级)
- SwipeConsumerExclusiveGroup:
管理一组互斥的SwipeConsumer,同时最多只能打开一个,可用在RecyclerView等列表项中使用
演示
弹性拉伸样式 StretchConsumer |
弹性留白样式 SpaceConsumer |
滑动透明样式 TranslucentSlidingConsumer |
---|---|---|
在上层显示的滑动抽屉 DrawerConsumer |
在下层显示的滑动抽屉 (可设置联动系数) SlidingConsumer |
|
开门样式 DoorConsumer |
百叶窗样式 ShuttersConsumer |
|
用于制作封面
开门样式 | 百叶窗样式 | 抽屉样式 |
---|---|---|
用于实现Activity侧滑返回
无需透明主题,无需继承某个特定的Activity,不需要侵入xml布局文件,也不需要侵入BaseActivity,轻松搞定Activity侧滑返回
仿QQ侧滑返回 StayConsumer |
仿微信侧滑返回 ActivitySlidingBackConsumer |
仿MIUI系统侧滑返回 BezierBackConsumer |
---|---|---|
开门样式 ActivityDoorBackConsumer |
百叶窗样式 ActivityShuttersBackConsumer |
全局使用 SmartSwipeBack |
使用方式
首先,添加 SmartSwipe
依赖到项目中
implementation 'com.billy.android:smart-swipe:latestVersion'
由于主库未添加任何支持库,仅在android api >= 21(android 5.0以上)时才支持嵌套滑动效果(NestedScrolling)。
如需兼容5.0以下版本嵌套滑动,分别按照如下2种方式来兼容androidX或android support库:
implementation 'com.billy.android:smart-swipe:latestVersion'
//android x环境下兼容NestedScrolling
implementation 'com.billy.android:smart-swipe-x:latestVersion'
或
implementation 'com.billy.android:smart-swipe:latestVersion'
//android support library环境下兼容NestedScrolling
implementation 'com.billy.android:smart-swipe-support:latestVersion'
开始使用
SmartSwipe
中绝大多数的使用都可以通过链式编程在一行代码内完成,API的设计风格如下:
SmartSwipe.wrap(...) //view or Activity
.addConsumer(...) //添加consumer
.enableDirection(...) //指定consumer接收哪个方向的侧滑事件
.setXxx(...) //[可选]一些其它设置项
.addListener(...); //[可选]给consumer添加监听
示例代码:
//为控件添加仿MIUI的弹性拉伸效果:
// 当纵向不能滚动(或滚动到顶/底)时,若继续拖动,则UI呈现弹性拉伸效果,释放后平滑恢复
SmartSwipe.wrap(view)
.addConsumer(new StretchConsumer())
.enableVertical();
可以为同一个View添加多个SwipeConsumer
,按照添加的顺序消费侧滑事件。例如:
SmartSwipe.wrap(view)
.addConsumer(new StretchConsumer())
.enableVertical() //仿MIUI拉伸效果的方向为:上下2个方向
.addConsumer(new SpaceConsumer())
.enableHorizontal() //仿iOS弹性留白效果的方向为:左右2个方向
;
每次侧滑,从开始到结束,只有被1个SwipeConsumer
全程消费,谁先捕获到本次侧滑,则接下来的侧滑距离都交给它来消费。
点击这里你将了解到:
- 内置的每种
SwipeConsumer
的具体用法 - 创建一个属于你的自定义
SwipeConsumer
的方法
全局只需一行代码即可搞定所有Activity侧滑返回(5种样式可选)
SmartSwipeBack.activityBezierBack(application, null); //仿小米MIUI系统的贝塞尔曲线返回效果
SmartSwipeBack.activityStayBack(application, null); //仿手机QQ的手势滑动返回
SmartSwipeBack.activitySlidingBack(application, null); //仿微信带联动效果的透明侧滑返回
SmartSwipeBack.activityDoorBack(application, null); //侧滑开门样式关闭activity
SmartSwipeBack.activityShuttersBack(application, null); //侧滑百叶窗样式关闭activity
详细内容及注意事项请看这里:全局侧滑返回
一行代码给View添加下拉刷新功能
//xxxMode第二个参数为false,表示工作方向为纵向:下拉刷新&上拉加载更多
//如果第二个参数设置为true,则表示工作方向为横向:右拉刷新&左拉加载更多
SmartSwipeRefresh.drawerMode(view, false).setDataLoader(loader);
SmartSwipeRefresh.behindMode(view, false).setDataLoader(loader);
SmartSwipeRefresh.scaleMode(view, false).setDataLoader(loader);
SmartSwipeRefresh.translateMode(view, false).setDataLoader(loader);
更多关于下拉刷新功能的介绍请查看下拉刷新, 关于自定义刷新控件请点击这里
SmartSwipe
特性:
- 支持上下左右4个方向侧滑
- 支持边缘触发侧滑也支持整个View(或整个Activity)区域内触发侧滑
- 支持给同一个控件添加多个侧滑效果
- 支持在View树的不同层级中嵌套使用
- 支持在ListView及RecyclerView等列表项及列表本身使用
- 支持NestedScroll(支持support和androidX)
- 支持通过代码触发侧滑
- 内置十多种
SwipeConsumer
侧滑效果(包括百叶窗、开门、滑动抽屉、下拉刷新、侧滑返回、侧滑删除等等)
SmartSwipe
封装了对控件侧滑事件(上/下/左/右4个方向滑动的手势事件)的捕获、分发及多点交替滑动的处理,基于SmartSwipe
我们可以为控件添加各种你想要的侧滑效果。
主要实现原理及思想来源于android官方支持库中的ViewDragHelper,在其基础上,将它对子View的捕获及移动处理改成对父View自身触摸事件的定性(能否及是否捕获)、定向(捕获的事件所触发的侧滑方向)及定量(事件捕获之后在侧滑方向上移动的距离),并交由SwipeConsumer
来完成侧滑事件的具体UI呈现效果
SwipeConsumer
类实现了侧滑事件处理的公共逻辑,通过继承SwipeConsumer
可以自定义各种丰富的侧滑效果。
SmartSwipe
的封装思路:
- 用一个ViewGroup将需要处理侧滑事件的控件View包裹起来,被包裹起来的控件作为它的
contentView
,可以为这个ViewGroup添加一些附属控件View(如:滑动抽屉) - 拦截这个ViewGroup的touch事件,并将touch事件转换为侧滑距离交给
SwipeConsumer
进行消费 SwipeConsumer
在消费侧滑事件的过程中,对contentView及附属控件的UI呈现(位置、缩放、透明等)进行合理的加工,从而实现各种侧滑的效果。
鸣谢
实现侧滑返回功能Activity透明的方案参考了:
- Android侧滑返回分析和实现(不高仿微信) 源码:SwipeBackHelper
- ikew0ng/SwipeBackLayout
- Android 平台滑动返回库对比
- Android版与微信Activity侧滑后退效果完全相同的SwipeBackLayout
实现贝塞尔曲线侧滑返回功能时参考了:
下拉刷新功能参考了scwang90/SmartRefreshLayout部分设计
Demo中的卡通头像均来自: https://www.thiswaifudoesnotexist.net/
Demo中使用icon图片均取自:https://www.iconfont.cn/
Demo中封面使用的图片来源于回车素材网(侵删)
Demo中封面使用的下雪效果自定义View拷贝并修改自:AnliaLee/FallingView
Demo中首页使用的点赞自定义View直接引用自第三方开源库:jd-alexander/LikeButton
扩展包(smart-swipe-refresh-ext)中的ArrowHeader使用了第三方开源库: Ifxcyr/ArrowDrawable