
1.SwipeRefreshLayout是Androidx提供的下拉刷新的库,需要在代码中引入该库,才能使用。
 implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' 
2.在layout中配置。SwipeRefreshLayout,必须包含一个根节点的子view
  <com.example.viewpager.swipelayout.VpSwipeRefreshLayout
        android:id="@+id/swipe_refresh"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">
        </LinearLayout>
    </com.example.viewpager.swipelayout.VpSwipeRefreshLayout> 
3.Activity中使用。
 refreshLayout = findViewById(R.id.swipe_refresh);
        refreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            //下拉刷新时调用
            @Override
            public void onRefresh() {
                //模拟网络请求需要1000毫秒,请求完成,设置setRefreshing 为false,停止刷新
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        refreshLayout.isRefreshing();
                        refreshLayout.setRefreshing(false);
                    }
                }, 1000);
            }
        });
        //修改的是旋转箭头的颜色
        refreshLayout.setColorSchemeColors(getResources().getColor(R.color.red));
        //修改的是下拉圆形的背景色
        refreshLayout.setProgressBackgroundColorSchemeColor(getResources().getColor(R.color.red3));
        //控制SwipeLayout是否响应下拉事件,true不响应,false响应。
        refreshLayout.setOnChildScrollUpCallback(new SwipeRefreshLayout.OnChildScrollUpCallback() {
            @Override
            public boolean canChildScrollUp(@NonNull SwipeRefreshLayout parent, @Nullable View child) {
                return canChildScrollUp;
            }
        }); 
4.下拉刷新可以通过SwipeRefreshLayout来实现,但是上拉加载更多,则需要通过RecycleView来进行实现。
5.SwipeRefreshLayout和VIewPager一起使用时会发生事件冲突,这时需要在父控件中进来判断。
  public VpSwipeRefreshLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
        mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
    }
    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        int action = ev.getAction();
        switch (action) {
            case MotionEvent.ACTION_DOWN:
                // 记录手指按下的位置
                startY = ev.getY();
                startX = ev.getX();
                // 初始化标记
                mIsVpDragger = false;
                break;
            case MotionEvent.ACTION_MOVE:
                // 如果viewpager正在拖拽中,那么不拦截它的事件,直接return false;
//                mIsVpDragger = true;
                if(mIsVpDragger) {
                    return false;
                }
                // 获取当前手指位置
                float endY = ev.getY();
                float endX = ev.getX();
                float distanceX = Math.abs(endX - startX);
                float distanceY = Math.abs(endY - startY);
                // 如果X轴位移大于Y轴位移,那么将事件交给viewPager处理。
                if(distanceX > mTouchSlop && distanceX > distanceY) {
                    mIsVpDragger = true;
                    return false;
                }
                break;
            case MotionEvent.ACTION_UP:
            case MotionEvent.ACTION_CANCEL:
                // 初始化标记
                mIsVpDragger = false;
                break;
        }
        // 如果是Y轴位移大于X轴,事件交给swipeRefreshLayout处理。
        return super.onInterceptTouchEvent(ev);
    } 
                


















