关于SmartSwipe


侧滑就选智能侧滑,弹性侧滑、滑动抽屉、下拉刷新、侧滑返回以及侧滑删除等你想到和没想到的,通通搞定。

smart-swipe smart-swipe-x smart-swipe-support
最新版 Download Download Download

为了便于使用,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透明的方案参考了:

实现贝塞尔曲线侧滑返回功能时参考了:

下拉刷新功能参考了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

Copyright © qibilly.com 2019 all right reserved,powered by Gitbook最后修改时间: 2019-07-31 14:49:01

results matching ""

    No results matching ""