自定义SwipeRefreshLayout

上次试用了一下v4包中新加入的SwipeRefreshLayout控件。虽然ActionBar-PullToRefresh没有强大,但后者使用实在太麻烦,与Actionbar耦合在一起,兼容性维护等等。

于是有空就修改一下SwipeRefreshLayout,顺便看看控件源码什么的。猜想实际使用可能遇到的需求扩展一下。

  1. 增加下拉的HeaderView,可以往里面放一些下拉彩蛋、广告什么的。
  2. 调整下拉逻辑,下拉到100%后不立刻执行刷新,松手后才开始刷新。
  3. 修正下拉悬停抖动……
  4. 可以设置下拉时,子控件不跟随。(只有progressBar变化)
  5. 增加OnPullDownListener,监听下拉高度变化

Demo地址(注意需要切换到modify_swipe_refresh_layout分支)


关于修正下拉悬停抖动

源代码根据mTouchSlop的值来判断是否有滑动动作。
mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();

然后在onTouchEvent里前后两次滑动的差值与mTouchSlop判断,所以会忽略微小的滑动,导致下拉悬停抖动。 所以我就把mTouchSlop去掉了……

预览图

Author

Relex

Android Developer