调用Android的SwipeRefreshLayout 的setRefreshing() 方法,本以为可以完成像知乎客户端的自动刷新,可是并没有,在网上找了一下问题的所在
这里的mOriginalOffsetTop参数是在onMeasure方法中获取的,在onMeasure没有调用的时候mOriginalOffsetTop是没有值得,所以按照这个思路去处理这个问题。既然onMeasure没有执行,我们就保证让onMeasure执行之后再去setRefreshing()
所以代码可以这样写
public class SwipeRefresh extends SwipeRefreshLayout
{
private boolean mMeasured = false;
private boolean mRefresh = false;
public SwipeRefresh(Context context)
{
super(context);
}
public SwipeRefresh(Context context, AttributeSet attrs)
{
super(context, attrs);
}
@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
if (!mMeasured) {
mMeasured = true;
setRefreshing(mRefresh)
}
}
@Override
public void setRefreshing(boolean refreshing)
{
if (mMeasured) {
super.setRefreshing();
}
else{
mRefresh = refreshing;
}
}
}
这样, 问题就解决了
XRecyclerView 与 SwipeRefreshLayout一起用会有坑, XRecyclerView自己实现了上下拉的监听,把XRecyclerView做为SwipeRefreshLayout的子view,SwipeRefreshLayout就判断不了下拉事件了,从这个问题上卡主好久。
提供一个CoordinatorLayout 的动画,像钉钉上面的titleBar一样的动画
https://github.com/saulmm/CoordinatorBehaviorExample