Material Design风格中CoordinatorLayout、Behavior和nestedScroll的整理分析
2016-07-15 02:12
344 查看
现象与分解
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概念很不错的一篇
https://lab.getbase.com/introduction-to-coordinator-layout-on-android/ 其源码 https://github.com/ggajews/coordinatorlayoutwithfabdemo
中文翻译版本 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互动的很不错的一篇
https://lab.getbase.com/nested-scrolling-with-coordinatorlayout-on-android/
其源码 https://github.com/ggajews/nestedscrollingchildviewdemo
中文翻译版本 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接口,留意交互流程,以及滑动距离的分配与消费
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概念很不错的一篇
https://lab.getbase.com/introduction-to-coordinator-layout-on-android/ 其源码 https://github.com/ggajews/coordinatorlayoutwithfabdemo
中文翻译版本 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互动的很不错的一篇
https://lab.getbase.com/nested-scrolling-with-coordinatorlayout-on-android/
其源码 https://github.com/ggajews/nestedscrollingchildviewdemo
中文翻译版本 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接口,留意交互流程,以及滑动距离的分配与消费
相关文章推荐
- 设计模式(4)-行为型-模版模式(Template Method)
- 设计模式(4)-行为型-模版模式(Template Method)
- 设计模式(4)-行为型-模版模式(Template Method)
- 设计模式(4)-行为型-模版模式(Template Method)
- Gas Station
- Recylerview 加载更多功能实现(分页加载)
- 两个Linux分析脚本20160715
- IOS开发之Bug--使用xib的自动布局和代码中修改遇到的bug
- poj 3061 Subsequence 取尺法
- hihocoder #1327
- WAMP
- 20160715瞎鸡巴讨论WIndows渗透
- JMS工作原理
- jsp是servlet的扩展
- Registry Workshop —— 强大的注册表编辑工具
- 【zookeeper】应用场景
- 【慢速学数据结构】队列篇
- python_类属性和实例属性
- Markdown书写方式
- 使用Webuploader过程中遇到的坑--ios端,选择文件后无反应