CoordinateLayout 自定义Behavior 仿百度外卖效果 实践

高仿百度外卖效果

代码地址:https://github.com/yaodiwei/CoordinatorLayoutTester

 

真百度外卖效果

 

 

自定义Behavior一半分为两种类型

一种是重写layoutDependsOn和onDependentViewChanged。然后根据dependency控件的大小或位置的改变,来使自己的控件改变。

一种是重写onStartNestedScroll、onNestedPreScroll和onNestedScroll等跟scroll相关的方法。这个是针对一些NestedScrollView或RecyclerView这些只会内部滑动而不会改变自身大小和位置的控件。

 

关于自定义Behavior的介绍文章。有两篇在用法方面介绍的很好。

Material Design 之 Behavior的使用和自定义Behavior

使用 CoordinatorLayout 实现复杂联动效果

 

 

 

 

关于这个仿百度外卖的控件,我本来是用第二种方法的。但是后来发现在 onNestedPreFling 方法上,不会回调多次。所以最后只能在NestedScrollView.setOnScrollChangeListener 这个监听类的 onScrollChange 方法上了。搞的最后好像跟 Behavior 没多大关系.........

注释都放在代码里了,这里实现该效果主要是依靠 HeaderBehavior 这个类。

放『附近商户』和『此刻最热』的称为MiddleContent。里面分为3部分

 

  1. MiddleContent 还处于在标题栏底下
  2. MiddleContent 已经和标题栏有重叠,属于变形阶段
  3. MiddleContent 在屏幕上方了,此时 MiddleContent 需要固定在标题栏上。

关键点几个,

第二步时,需要把标题栏的背景颜色变透明。

第三步时,需要把 MiddleContent 这个 View 移动到标题栏上,就是parentView.removeView和addView方法。

还有在这3步状态转换时,要把所有的 View 重置,不然有时滚太快会让这些 View 处于中间状态。

 

 

 

 

代码地址:https://github.com/yaodiwei/CoordinatorLayoutTester

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值