自定义View事件之进阶篇(四)-自定义Behavior实战

2824145-96545df5bc123057.jpg
女票镇楼.jpg

前言

在上篇文章自定义View事件之进阶篇(三)-CoordinatorLayout与Behavior中,我们介绍了CoordainatorLayout下的Behavior机制,为了帮助大家更好的理解并运用Behavior,现在我们通过一个Demo,来巩固我们之前学习的知识点。

该博客中涉及到的示例,在NestedScrollingDemo项目中都有实现,大家可以按需自取。

效果展示

先看一下我们需要实现的效果吧,如下图所示:

2824145-bd1895590ca78f26.gif
例子展示.gif

友情提示:Demo中涉及到的控件为CoordinatorLayout、TextView、RecyclerView。文章都会围绕这三个控件进行讲解。

从Demo效果来看,这是非常简单的嵌套滑动。如果采用我们之前所学的NestedScrollingParent2NestedScrollingChild2实现接口的方式。我们能非常迅速的解决问题。但是如果采用自定义Behavior的话,那么就稍微有点难度了。不过不用担心,只要一步一步慢慢分析,就总能解决问题的。

RecyclerView布局与测量的分析

在Demo中,RecyclerView与TextView开始的布局关系如下图所示:

2824145-5a8df94189d4bd0a.jpg
布局关系.jpg

根据在文章自定义View事件之进阶篇(三)-CoordinatorLayout与Behavior中我们所学的知识点,我们知道CoordinatorLayout对子控件的布局是类似于FrameLayout的,所以为了保证RecyclerView在TextView的下方显示,我们需要创建属于RecyclerView的Behavior,并在该Behavior的onLayoutChild方法中处理RecyclerView与TextView的位置关系。

除了解决RecyclerView的位置关系以外,在该Demo中,我们还可以看出,RecyclerView与TextView之间有着一个联动的关系(这里指的是RecyclerView与TextView之间的位置关系,而不是RecyclerView中的内容)。随着TextView逐渐上移的时候,下方的RecyclerView也跟着往上移动。那么我们可以确定的是RecyclerView必然是依赖TextView的。也就是说我们需要重写Behavior的layoutDependsOnonDependentViewChanged方法。

确定一个控件(childView1)依赖另外一个控件(childView2)的时候,是通过layoutDependsOn(CoordinatorLayout parent, V child, View dependency)这个方法。其中child是依赖对象(childView1),而dependency是被依赖对象(childView2),该方法的返回值是判断是否依赖对应view。如果返回true。那么表示依赖。反之不依赖。一般情况下,在我们自定义Behavior时,我们需要重写该方法。当layoutDependsOn方法返回true时,后面的onDependentViewChangedonDependentViewRemoved方法才会调用。

除了考虑以上因数以外,我们还需要考虑RecyclerView的高度。观察Demo,我们可以看出,RecylerView在移动前后,始终都是填充整个屏幕的。为了保证RecylerView在移动过程中,屏幕中不会出现空白(如下图所示)。我们也需要在CoordinatorLayout测量该控件的高度之前,让控件自主的去测量高度。也就是重写RecylerView对应Behavior中的onMeasureChild方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值