方案一:继承想下拉刷新的View类(ListView|RecyclerView|ScrollView等),重写dispatchTouchEvent或者onTouchEvent方法,改变顶部刷新RefreshView的LayoutParams.height。需要借助Scroller类在手势释放的时候自动滚动。
案例:ListViewForPath|FriendsCircleLisView|XRecyclerView|XListView 还有一种不是该变height而是改变paddingTop,案例老的网易新闻下拉刷新 还有johannilsson/android-pulltorefresh
方案二:外层用LinearLayout包起来,最上面添加刷新View。设置LinearLayout的paddingTop=-RefreshView.measureHeight,在onTouchEvent中调用LinearLayout.scrollTo或者scrollBy方法滚动LinearLayout中的内容。需要借助Scroller类在手势释放的时候自动滚动。
方案三:外层用FrameLayout包起来,RefreshView放最底层,想下拉刷新的View放在最上层。在FrameLayout中运用ViewDragHelper工具类拖动改变RefreshView的位置。
案例:天猫下拉刷新
方案四:系统提供的下拉刷新方案http://pan.baidu.com/s/1eSNSnmE
总结: 1、下拉刷新就是通过改变refreshView的位置或者大小或者padding来显示不同的状态
2、平滑滚动是通过Scroller或者利用动画插值循环调用不停改变值实现(Android-PullToRefresh)
3、各种基础布局值提供布局样式,本省并没有什么事件处理,所以不用担心事件的影响。