Android每日一问笔记-对于事件分发,嵌套滚动的了解

基于https://www.wanandroid.com每日一问的笔记,做一些整理,方便自己进行查看和记忆。

原文链接:https://www.wanandroid.com/wenda/show/8463


事件分发原理

  • 事件分发,其实就是一个责任链的变种,这个责任链,是一个设计模式。
  • 在Android中,当最顶层的View收到事件之后,会一级一级地往下传,在每一级View中,它们各自都有权利去处理(也就是拦截)这个事件,如果这次的事件传到了最底层的View,也没能处理的话,就会从这个最底层的View一级一级地向上传回去。

嵌套滚动

  • 这个嵌套滚动,说的应该不是普通的嵌套滚动(比如ScrollView套ListView),而是说NestedScrollingParent和NestedScrollingChild,这两个东西,出来挺久了,可能好多同学还是觉得有点陌生,但我们在很多场景下,已经在不识不觉中使用它了,比如说CoordinatorLayout,它是一个NestedScrollingParent,还有RecycleView,它是一个NestedScrollingChild。
    一个最常见的效果:列表向上滚动,ToolBar收起,反之,当列表向下滚动时,ToolBar随着列表的滚动出现。这个效果,用NestedScrolling来实现,可以非常简单。

嵌套滚动原理

  • 它的原理,很简单:在NestedScrollingChild滚动过程中,它和NestedScrollingParent会一直"保持通讯",比如:
    • 当Child滚动之前,会通知Parent:“我要开始滚动啦,你看你要不要做点什么”。
    • 当Child在滚动的时候,也会每次通知Parent:“我这次消费了xxx,你看你还要做什么”。
    • 当Child滚动完成,Parent也会收到通知:“我滚动完成了”。
  • 除了手指触摸滚动的,还有惯性滚动,但原理和流程是一样的。

至于为什么嵌套滚动有必要存在,我觉得有以下几个原因:

  • 减少工作量,比如说一些看似很复杂滚动效果,在使用NestedScrolling机制之后,就变得简单起来了。
  • 降低耦合度,在NestedScrolling机制出现之前,很多与子View有滚动交互的ViewGroup,大部分处理滚动的代码,都堆积这个ViewGroup中。而推出了NestedScrolling之后,这个滚动的子View,由被动方,变成了主动方(滚动的状态都是由这个子View去决定,不再需要ViewGroup去主动判断)。
  • 增加灵活性,CoordinatorLayout的强大,相信同学们都体会到了,它可以通过设置各种不同的Behavior,来定制它的交互效果。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值