分析了下滴滴首页布局,以为是通过touch事件去不断刷新底部布局的位置
结果实现后,发现滑动不流畅,而且布局内子view的隐藏显示,
都会触发整个布局的重新测量,导致滑动后的位置被重新初始化回原来的位置。
选择第二种方案,用nestedscrollview+recyclerview去实现,仿滴滴首页信息流demo
先是布局,地图是不能随意动,但是地图要随顶部tab进行切换
所以首先主界面布局是(直接上代码)
fragment里mapview可以用match_parent去设置宽高,这样的话,底部布局后面滑动到顶部,就可以直接gone掉tablayout、titlebar,也不怕地图会跟着顶到顶部。
信息流布局单独写了个view,继承自nestedscrollview,这样可以重写nestedscrollview的一些方法。
选择地址下面布局设计是一个recyclerview,实现适配不同布局,这里只做订单和优惠券展示。
这样每次进入首页都会加载这些布局数据,拿到后会塞进recyclerview里,通过adapter itemview监听布局改变去拿首个item的高度
回调后通过屏幕高度 - (底部布局的最顶部布局toplayout + 选择上下车布局bottomview高度 + 首个item高度 + 虚拟导航键高度)
得到nestedscrollview 最顶部布局到屏幕顶部的距离,设置给toplayout。
这样页面一进来就显示在这个位置
显示效果不是很好,大家可以自己调这个位置。
滑动的时候就简单了,滑到快接近顶部tablayout的时候把tablayout和titlebar给隐藏,该有信息流布局toplayout也隐藏
显示tobottomimg,滑下来就显示。
如果有设计+效果 可以做到99%跟滴滴差不多,后期还可以扩展的更丰满
主要是项目都是已经迭代很多,功能已经完善,突然产品有一天想跟滴滴一样怎么办。
不用大动首页,照着我的这个慢慢细改吧,最省时省力