SwipeRefreshLayout 下拉刷新

SwipeRefreshLayout 下拉刷新_第1张图片

 1.SwipeRefreshLayout是Androidx提供的下拉刷新的库,需要在代码中引入该库,才能使用。

 implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'

2.在layout中配置。SwipeRefreshLayout,必须包含一个根节点的子view

  

        
        
    

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);
    }

代码下载:

https://download.csdn.net/download/niuyongzhi/88408862

你可能感兴趣的:(android开发,android)