Material Design风格中CoordinatorLayout、Behavior和nestedScroll的整理分析

现象与分解

     Material Design中一个神奇的设计是,抹动一个子view甲时,子view乙与子view甲一起滑动

     可以想象一下,其实现过程必然是
          子view甲向父ViewGroup申请滑动
          父ViewGroup将部分滑动距离交给子view甲,部分交给子view乙
          子view甲和乙同时滑动

     为完成这个组合滑动过程,View及ViewGroup类增加了三个概念
          有Coordinator功能的ViewGroup可以分配滑动给子view
          NestedScroll的概念,中文直译是“嵌套滑动” ,但感觉“关联滑动”更为贴切
          子view的行为,Behavior

     这类组合滑动可以抽象为如下更为一般性的关联行为
          子view希望某个动作,向父ViewGroup申请
          父ViewGroup协调其他子view同步进行动作

     官网上对此关联行为并无系统性的说明


搜索与研究

     关于Coordinator和Behavior概念很不错的一篇
     中文翻译版本 http://www.jianshu.com/p/0e20aadf8415

     其中父与多个子view之间互动过程
          子view之一是SnakeBar
          子view之二是FloatActionButton,声明自己有Behavior,以及敏感对象是SnakeBar
          父ViewGroup是一个CoordinatorLayout,实现了NestedScrollingParent接口
          SnakeBar发生变化。似乎没有主动知会ViewGroup,可能是父ViewGroup在分配布局时知道
          父ViewGroup轮询所有子view,查看是否有对SnakeBar敏感的Behavior并传递信息过去
          FloatActionButton因此滑动
          Snackerbar滑动
          

     关于Coordinator和NestedScroll互动的很不错的一篇
     中文翻译版本 http://www.jianshu.com/p/81e19b2e5705

     互动过程
          主动子view实现NestedScrollingChild接口,用来和父ViewGroup沟通
          父ViewGroup实现NestedScrollingParent接口,用来和主动子view沟通
          被动子view实现Behavior,其中也有nested scroll相关处理方法
          主动子view在NestedScrollingChild接口中通过辅助对象NestedScrollingChildHelper通知父ViewGroup
          父ViewGroup遍历子view,如果有子view有对应Behavior,调用该Behavior

     可见,主动子view和父ViewGroup之间是NestedScrollingChild及NestedScrollingParent接口,父ViewGroup和被动子view之间是Behavior

     值得阅读的源码
          CoordinatorLayout,作为父ViewGroup
          AppBarLayout,作为被动子view
          NestedScrollView,既有父接口也有子接口
          FloatingActionButton,有Behavior
          NestedScrollingChild及NestedScrollingParent接口,留意交互流程,以及滑动距离的分配与消费
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值