SwipeConsumer


作为所有具体Consumer的父类,SwipeConsumer本身是一个抽象类,其主要职能为:

  • 对滑动事件的捕获、加工及传递等逻辑进行统一封装
  • 对滑动方向是否启用、滑动方向是否锁定、滑动距离限制、自动滑动动画的插值器等一系列公共属性的处理并提供相应的设置API

工作流程

  1. 捕获侧滑事件
    • 从静止状态开始侧滑: tryAcceptMoving, 返回true表示捕获
    • 非静止状态开始侧滑: tryAcceptSettling, 返回true表示捕获
  2. 开始侧滑事件
    • onSwipeAccepted, 捕获到侧滑事件后,会立即回调
  3. 计算并消费滑动距离(0次或多次)
    • 计算侧滑距离
      • clampDistanceHorizontal
      • clampDistanceVertical
    • 消费滑动距离
      • onDisplayDistanceChanged
  4. 手势释放事件(手势触发的侧滑才会产生手势释放事件)
  5. 已关闭/已打开
    • onOpened/onClosed
  6. 结束侧滑事件

如何自定义一个SwipeConsumer

  1. 新建一个类,继承SwipeConsumer
  2. [可选]在构造方法中进行一些初始化(需要context对象才能初始化的属性,可以放在onAttachToWrapper方法中初始化)
  3. [可选]如果有额外的捕获逻辑,可以重写父类的tryAcceptMovingtryAcceptSettling方法
  4. 重写onSwipeAccepted方法,由于此时已经确定捕获了侧滑事件,并确定好了侧滑的方向(mDirection),可以为本次侧滑事件做一些初始化工作
  5. [可选]重写clampDistanceHorizontalclampDistanceHorizontal方法,可在满足一定条件下才真正执行侧滑
  6. 重写onDisplayDistanceChanged方法,执行具体的侧滑的UI效果呈现
  7. [可选]如果UI呈现效果中包含布局控件的移动,需要重写onLayout方法,在此方法中也要按照侧滑后的逻辑进行控件布局定位
  8. 重写onDetachFromWrapper方法,还原现场,移除当前consumer的所有改动痕迹

具体细节可参考内置的各种SwipeConsumer:

更多侧滑效果等你来添加!

Copyright © qibilly.com 2019 all right reserved,powered by Gitbook最后修改时间: 2019-07-10 14:20:41

results matching ""

    No results matching ""