在豌豆荚的应用详情页中有个ViewPager布局,该布局头部添加了一个可上下收展的view用于显示应用资料。实现思路基本上就是利用ViewDragHelper进行拖动来控制头部的view的布局。当TopView可见时,手势事件被拖动层截获控制上下拖动达到TopView的折叠和展开效果。当TopView不可见时,手势事件交由ViewPager进行控制达到ListView正常滚动,并在ListView的onScroll滚动监听中判断ListView是否触顶。如果触顶则下拉拖动ViewPager显示TopView.
项目已经上传到Github的DragTopLayout.
先看下效果图:
实现过程
1.继承一个FrameLayout,在FrameLayout中控制子View拖动。FrameLayout初始化中实例化一个ViewDragHelper对象。
ViewDragHelper.create(this, 1.0f, callback);
2.参数中callback即为拖动过程中所有的事件回调,实现一个ViewDragHelper.Callback()。
Callback中的所用到得方法如下: