CoordinatorLayout 的今生前世

联动效果

现代化的 Android 开发一定对 CoordinatorLayout 不陌生,CoordinatorLayout + AppBarLayout + CollapsingToolbarLayout + Toolbar 的全家桶更是信手拈来,无需一行代码光靠 xml 就能实现下面这种折叠导航栏的炫酷效果:

这种搭配的教程已经非常多了,不是本文的重点。在使用 xml 时候肯定不少同学掉过一个坑:界面主要内容与头部元素重叠了!粗略了解一下因为 CoordinatorLayout 的布局方式类似 FrameLayout 默认情况下所有元素都会叠加在一起,解决方案也非常玄学,就是给内容元素添加一个 app:layout_behavior="@string/appbar_scrolling_view_behavior" 属性就好了,简直像黑魔法!

Unfortunately,代码并没有魔法,我们能偷懒是因为有人封装好了。跟踪进这个字符串是 com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior 显然这是个类!事实上这就是今天的重头戏 —— Behavior.

这个效果太复杂了,所以 Google 才会帮我们包装好,下面换一个简单的例子便于学习:

这是仿三星 One UI 的界面。上面是一个头布局,下面是一个 RecyclerView,向上滑动时首先头布局收缩渐隐并有个视差效果,头部彻底隐藏后 RecyclerView 无缝衔接。向下滑动时同理。

事件拦截实现

在继续探索之前,先思考一下如果没有 CoordinatorLayout 这种现代化东西怎么办?因为这牵扯到滑动手势与 View 效果的糅合,毫无疑问应该从触摸事件上入手。简单起见暂时只考虑手指向上滑动(列表向下展示更多内容),大概需要进行以下操作:

  1. 在父布局 onInterceptTouchEvent 中拦截事件。
  2. 父布局 onTouchEvent 处理事件,对 HeaderView 进行操作(移动、改变透明度等)。
  3. HeaderView 完全折叠后父布局不再拦截事件,RecyclerView 正常处理滑动。

现在已经遇到问题了。因为一开始父布局拦截了事件,因此根据 Android 事件分发机制,哪怕后续不再拦截其子控件也无法收到事件,除非重新触摸,这就造成了两者的滑动不能无缝衔接。

接着还有一个问题,反过来当 RecyclerView 向下滑动至顶部时,如何通知 HeaderView 展开?

哪怕解决了上述主要问题,肯定还有其他小毛病,例如子控件无法触发点击事件等等等非常恼人

一起动才够嗨!Android CoordinatorLayout 自定义 Behavior相关推荐

  1. Android CoordinatorLayout 自定义Behavior 高仿美团商家详情界面 实现页面内容复杂联动效果

    内容如题 效果如下 顺带涉及到: Scroller+Handler 实现View自动滑动 View属性动画 触摸事件分发机制 ConstraintLayout约束布局 emmmm 实现参考: Cons ...

  2. 红橙Darren视频笔记 CoordinatorLayout:实现自定义behavior

    效果: 目标:利用CoordinatorLayout实现自定义behavior ,顶部的TitleBar和底部的ActionBar实现能够随着手势自由显示和隐藏 activity中使用了recycle ...

  3. Android:自定义CoordinatorLayout.behavior 简单的仿UC首页

    CoordinatorLayout顾名思义协调布局,是用来协调该布局下的子控件,最简单地使用就是头部伸缩和折叠了,配合着TabLayout,只需要设置一下AppBarLayout子控件的layout_ ...

  4. Android仿小米时钟嵌套滑动(NestedScroll, 自定义behavior)

    最近无聊刷手机的时候, 发现小米时钟的嵌套滑动很有意思, 就试着做了下 先上对比图: 分析下小米时钟的滑动 闹钟列表 向上滑动时, 时钟面 透明度上升, 快到最大滑动时逐渐显示数字时钟. 在闹钟列表向 ...

  5. CoordinatorLayout高级用法-自定义Behavior

    在新的support design中,CoordinatorLayout可以说是最重要的一个控件了,CoordinatorLayout给我们带来了一种新的事件的处理方式--behavior,你是不是还 ...

  6. android安卓定义,安卓自定义Behavior

    自定义Behavior,最外层布局必须是CoordinatorLayout 实现的效果,上滑隐藏TextView,下滑显示TextView 效果如下: GIF.gif public class Bot ...

  7. Android自定义Behavior第十六式之空中楼阁

    前言 & 初步分析 上个月鸿神在群里推荐一位同学的Flutter版WanAndroid项目的时候发现了一个炫酷的效果: 嗯,就是一个下拉进入二楼的效果,但因为这个项目是用Flutter做的,无 ...

  8. android底部滑出view,Android CoordinatorLayout与NestedScrollView基于Behavior几行代码实现底部View滑入滑出...

    Android CoordinatorLayout与NestedScrollView基于Behavior几行代码实现底部View滑入滑出 在CoordinatorLayout的Behavior出现之前 ...

  9. Android自定义Behavior出现This graph contains cyclic dependencies

    最近刚开始学习使用CoordinatorLayout,并且自定义Behavior,因为项目要求,要在webview滑动的时候,headview要跟着滑动改变自身大小,并且要使webview在headv ...

最新文章

  1. 成功解决WARNING: Ignoring invalid distribution -illow (E:\program files\python\python36\lib\site-package
  2. 在HTML中嵌入PHP代码,有以下几种方法,其中错误的是( )
  3. 数据竞赛入门-金融风控(贷款违约预测)一、赛题介绍
  4. 双稳态电路的两个稳定状态是什么_电子电度表磁保持继电器里面是什么样呢?...
  5. android split工具,合并APKS为APK工具 Apktool M – AntiSplit on Android v2.4.0|张小北
  6. 当配置 DispatcherServlet拦截“/”,SpringMVC访问静态资源的三种方式
  7. yum源配置文件解释
  8. python劣势_Ruby对比Python的优势和劣势
  9. Mount is denied because the NTFS volume is already exclusively opened.
  10. 单片机应用系统设计技术——基于51单片机的火灾温度烟雾报警器设计
  11. MIN-MAX归一化
  12. android 软键盘弹出内容整体上移,软键盘弹出后布局上移
  13. 《那些年啊,那些事——一个程序员的奋斗史》——17
  14. 微信开发总结1——关于微信企业号API,Auth验证
  15. 计算机拨打比赛策划书,电脑打字擂台赛活动策划书
  16. 计算机监控系统改造,李家峡水电站计算机监控系统改造
  17. 使用java进行excel的读写,两种excel的区别以及easyexcel的使用
  18. 多方安全计算(MPC)发展脉络及应用实践
  19. 如何建设企业入侵防御体系
  20. 2016hctf Writeup.md

热门文章

  1. GraphSAGE论文阅读笔记
  2. 拉里·埃里森亲自支招,数据库自动化之后,DBA何去何从???
  3. amd锐龙笔记本cpu怎么样_九代酷睿还是AMD锐龙?多款标压笔记本处理器性能实测对比...
  4. POJ-3426-0-1背包Charm Bracelet
  5. Java语言有哪些特点?
  6. 网络营销---春节营销案例
  7. java web实验_javaweb实验报告
  8. 李子柒——成功的网络视频制作人及其营销分析
  9. 记录为了使用Wechaty安装docker 中的一些问题
  10. web的首屏加载优化