一起动才够嗨!Android CoordinatorLayout 自定义 Behavior
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 效果的糅合,毫无疑问应该从触摸事件上入手。简单起见暂时只考虑手指向上滑动(列表向下展示更多内容),大概需要进行以下操作:
- 在父布局
onInterceptTouchEvent
中拦截事件。 - 父布局
onTouchEvent
处理事件,对 HeaderView 进行操作(移动、改变透明度等)。 - HeaderView 完全折叠后父布局不再拦截事件,RecyclerView 正常处理滑动。
现在已经遇到问题了。因为一开始父布局拦截了事件,因此根据 Android 事件分发机制,哪怕后续不再拦截其子控件也无法收到事件,除非重新触摸,这就造成了两者的滑动不能无缝衔接。
接着还有一个问题,反过来当 RecyclerView 向下滑动至顶部时,如何通知 HeaderView 展开?
哪怕解决了上述主要问题,肯定还有其他小毛病,例如子控件无法触发点击事件等等等非常恼人
一起动才够嗨!Android CoordinatorLayout 自定义 Behavior相关推荐
- Android CoordinatorLayout 自定义Behavior 高仿美团商家详情界面 实现页面内容复杂联动效果
内容如题 效果如下 顺带涉及到: Scroller+Handler 实现View自动滑动 View属性动画 触摸事件分发机制 ConstraintLayout约束布局 emmmm 实现参考: Cons ...
- 红橙Darren视频笔记 CoordinatorLayout:实现自定义behavior
效果: 目标:利用CoordinatorLayout实现自定义behavior ,顶部的TitleBar和底部的ActionBar实现能够随着手势自由显示和隐藏 activity中使用了recycle ...
- Android:自定义CoordinatorLayout.behavior 简单的仿UC首页
CoordinatorLayout顾名思义协调布局,是用来协调该布局下的子控件,最简单地使用就是头部伸缩和折叠了,配合着TabLayout,只需要设置一下AppBarLayout子控件的layout_ ...
- Android仿小米时钟嵌套滑动(NestedScroll, 自定义behavior)
最近无聊刷手机的时候, 发现小米时钟的嵌套滑动很有意思, 就试着做了下 先上对比图: 分析下小米时钟的滑动 闹钟列表 向上滑动时, 时钟面 透明度上升, 快到最大滑动时逐渐显示数字时钟. 在闹钟列表向 ...
- CoordinatorLayout高级用法-自定义Behavior
在新的support design中,CoordinatorLayout可以说是最重要的一个控件了,CoordinatorLayout给我们带来了一种新的事件的处理方式--behavior,你是不是还 ...
- android安卓定义,安卓自定义Behavior
自定义Behavior,最外层布局必须是CoordinatorLayout 实现的效果,上滑隐藏TextView,下滑显示TextView 效果如下: GIF.gif public class Bot ...
- Android自定义Behavior第十六式之空中楼阁
前言 & 初步分析 上个月鸿神在群里推荐一位同学的Flutter版WanAndroid项目的时候发现了一个炫酷的效果: 嗯,就是一个下拉进入二楼的效果,但因为这个项目是用Flutter做的,无 ...
- android底部滑出view,Android CoordinatorLayout与NestedScrollView基于Behavior几行代码实现底部View滑入滑出...
Android CoordinatorLayout与NestedScrollView基于Behavior几行代码实现底部View滑入滑出 在CoordinatorLayout的Behavior出现之前 ...
- Android自定义Behavior出现This graph contains cyclic dependencies
最近刚开始学习使用CoordinatorLayout,并且自定义Behavior,因为项目要求,要在webview滑动的时候,headview要跟着滑动改变自身大小,并且要使webview在headv ...
最新文章
- 成功解决WARNING: Ignoring invalid distribution -illow (E:\program files\python\python36\lib\site-package
- 在HTML中嵌入PHP代码,有以下几种方法,其中错误的是( )
- 数据竞赛入门-金融风控(贷款违约预测)一、赛题介绍
- 双稳态电路的两个稳定状态是什么_电子电度表磁保持继电器里面是什么样呢?...
- android split工具,合并APKS为APK工具 Apktool M – AntiSplit on Android v2.4.0|张小北
- 当配置 DispatcherServlet拦截“/”,SpringMVC访问静态资源的三种方式
- yum源配置文件解释
- python劣势_Ruby对比Python的优势和劣势
- Mount is denied because the NTFS volume is already exclusively opened.
- 单片机应用系统设计技术——基于51单片机的火灾温度烟雾报警器设计
- MIN-MAX归一化
- android 软键盘弹出内容整体上移,软键盘弹出后布局上移
- 《那些年啊,那些事——一个程序员的奋斗史》——17
- 微信开发总结1——关于微信企业号API,Auth验证
- 计算机拨打比赛策划书,电脑打字擂台赛活动策划书
- 计算机监控系统改造,李家峡水电站计算机监控系统改造
- 使用java进行excel的读写,两种excel的区别以及easyexcel的使用
- 多方安全计算(MPC)发展脉络及应用实践
- 如何建设企业入侵防御体系
- 2016hctf Writeup.md