android nestedscrollview 横向,一点见解: Android嵌套滑动和NestedScrollView

NestedScrollingParent

因为内控件是发起者, 所以外控件的大部分方法都是被内控件的对应方法回调的.

onStartNestedScroll : 对应startNestedScroll, 内控件通过调用外控件的这个方法来确定外控件是否接收滑动信息.

onNestedScrollAccepted : 当外控件确定接收滑动信息后该方法被回调, 可以让外控件针对嵌套滑动做一些前期工作.

onNestedPreScroll : 关键方法, 接收内控件处理滑动前的滑动距离信息, 在这里外控件可以优先响应滑动操作, 消耗部分或者全部滑动距离.

onNestedScroll : 关键方法, 接收内控件处理完滑动后的滑动距离信息, 在这里外控件可以选择是否处理剩余的滑动距离.

onStopNestedScroll : 对应stopNestedScroll, 用来做一些收尾工作.

getNestedScrollAxes : 返回嵌套滑动的方向, 区分横向滑动和竖向滑动, 作用不大 onNestedPreFling和onNestedFling : 同上略

外控件通过onNestedPreScroll和onNestedScroll来接收内控件响应滑动前后的滑动距离信息.

再次指出, 这两个方法是实现嵌套滑动效果的关键方法.

3

从NestedScrollView看嵌套机制

说完上面一大通, 终于可以开始分析源码来了解嵌套滑动机制起作用的具体逻辑了.

NestedScrollView简单地说就是支持嵌套滑动的ScrollView, 内部逻辑简单, 而且它既可以是内控件, 也可以是外控件, 所以选择分析它来了解嵌套滑动机制.

注意 : 因为NestedScrollingChildHelper和NestedScrollingParent这两个辅助类的实现跟View和ViewGroup中的对应方法是一样的, 而且View和ViewGroup的源码没有使用兼容类, 所以下面分析相关方法的时候源码都使用View和ViewGroup中的代码.

上面已经说了嵌套滑动是从startNestedScroll开始, 所以先看看哪里调用了这个方法, 在源码里一搜就能知道有两个地方调用了这个方法.

onInterceptTouchEvent中ACTION_DOWN的情况

onTouchEvent中ACTION_DOWN的情况

因为ACTION_DOWN是滑动操作的开始事件, 所以当接收到这个事件的时候尝试找对应的外控件. 只有找到了外控件才有后续的嵌套滑动的逻辑发生.

关于NestedScrollView在这里的实现其实有个奇怪的地方, 提出一个问题, 不感兴趣的可以直接跳过这段.

既然内控件是发起者, 为什么要

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值