您的位置:首页 > 其它

RecycleView 有下拉刷新情况下实现悬浮框效果

2017-12-15 17:24 274 查看
简介

1.当需求需要下拉刷新时,在Activity布局中添加一个和adapter布局一样的悬浮框布局,在代码中显示隐藏控制;

2.当需求没有下拉刷新时,就简单了,直接在adapter布局中定义一个悬浮框布局就可以了;



效果图

代码如下:

private int mSuspensionHeight;

private int mCurrentPosition = 0;

tvHeader:Activity布局中的tv;

mSuspensionBar: activity 布局中的悬浮框Layout;

recyclerView.addOnScrollListener(new RecyclerViewListener());

class RecyclerViewListener extends RecyclerView.OnScrollListener{

        @Override

        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {

            super.onScrollStateChanged(recyclerView, newState);

            mSuspensionHeight = mSuspensionBar.getHeight();

        }

        @Override

        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {

            super.onScrolled(recyclerView, dx, dy);

            View viewPosition = mLinearLayoutManager.findViewByPosition(mCurrentPosition);

/**

  *处理position为0的情况

          */

            if (viewPosition != null) {

                if (viewPosition.getTop() == 0 && mLinearLayoutManager.findFirstVisibleItemPosition() == 1

                        || dy == 0 && mLinearLayoutManager.findFirstVisibleItemPosition() == 0) {

                    tvHeader.setVisibility(View.GONE);

                    return;

                }

            }

            tvHeader.setVisibility(View.VISIBLE);

                    if (显示悬浮框布局的判断条件) {

                        View view = mLinearLayoutManager.findViewByPosition(mCurrentPosition + 1);

                        if (view != null) {

                            if (view.getTop() <= mSuspensionHeight) {

                                mSuspensionBar.setY(-(mSuspensionHeight - view.getTop()));

                            } else {

                                mSuspensionBar.setY(0);

                            }

                        }

                    }

               

                if (mCurrentPosition != mLinearLayoutManager.findFirstVisibleItemPosition()) {

                    mCurrentPosition = mLinearLayoutManager.findFirstVisibleItemPosition();

   
4000
                mSuspensionBar.setY(0);

                    tvHeader.setText(”赋值“);

                }

        }

    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: