先看效果图:
左图是58同城,右图是我模仿它的
我用CoordinatorLayout那种方法做,在这里总结下一直以来的使用经验,以这个58同城仿制demo为例:
1、 首先要确定谁做dependency(依赖视图),dependency一定要随着手势滑动而位置变化。明显那个搜索框是适合的,但还不理想。有时我们甚至找不到合适的人选。所以为什么我们不自己创造一个呢。我就特意创造了一个dependency,放一个适合的位置上,而且这个dependency高度为0,计算时多方便啊。
2、 编写Behavior,我在layoutDependsOn()把CoordinatorLayout里的view都引用了。这很方便,无所谓耦合性的问题。它们都是同一个Activity的,同一布局的,它们只是随着滑动设置自己的位置而已,又不是它们内部的代码互相纠缠。如果你不这样做,你就要编写很多个Behavior,处理滑动时写上很多重复的代码。
上面两点比较不同于一般的网上教程,但我认为这样做更好。
3、 然后处理手指按下并滑动的情况:onNestedPreScroll()与onNestedScroll()。onNestedPreScroll()处理上滑,onNestedScroll()处理下滑。
4、 跟着处理手指松开的情况:onNestedPreFling()与onStopNestedScroll()。onNestedPreFling()是准备惯性fling时的情况。先设定好dependency的几个特定位置,例如有:折叠、展开、下拉到可刷新、下拉到最大。在actionUp()这个方法分情况处理自动滑动的效果。还有些细节,刷新完后的自动滑动动画不同,要分开处理。
5、 在onDependentViewChanged()设置view们随着dependency的变化而变化。
其他的都是一些细节问题。做那个弧线路径也比较有技术含量。
详细项目:
https://github.com/zhengjingle/WuBaDemo