为recyclerview添加悬浮view

来源:互联网 发布:ubuntu安装类型选哪个 编辑:程序博客网 时间:2024/05/30 23:29

recyclerview中列表一般使用LinearLayoutManage,其中LinearLayoutManage有方法findviewbyposition(position);和findFirstVisibleItemPosition,他可以分别用来获取你指定position的view和第一个显示的item的位置.这是前提.

下面我们来说说思想:

1.我们建立一个布局文件,里边放recyclerview然后上边盖一个header.

2.我们的item布局中在正常需要的布局上添加一个header.和activity的header布局一样就行,可以建一个header布局直接include.

3.正常写好recyclerview直到能正常显示出来

4.写recyclerview.addOnScrollListener,在onScrolled中判断.下面我们看代码

mRecyclerList.addOnScrollListener(new RecyclerView.OnScrollListener() {            @Override            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {                super.onScrollStateChanged(recyclerView, newState);                //headerBarHeight 用suspension_bar来赋值获取到header的高度                headerBarHeight = suspension_bar.getHeight();            }            @Override            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {                super.onScrolled(recyclerView, dx, dy);                //获取到当前显示第一个view的position的下一个view                View view = linearLayoutManager.findViewByPosition(currentPosition + 1);                if(view != null){                    //判断如果gettop小于header的高度那么就设置header的Y偏移量                    if(view.getTop() <= headerBarHeight){                        suspension_bar.setY(-(headerBarHeight - view.getTop()));                    }else{                        //不然就设置偏移量为0,正常显示header                        suspension_bar.setY(0);                    }                }                //currentPosition 为当前显示position                if(currentPosition != linearLayoutManager.findFirstVisibleItemPosition()){                    currentPosition = linearLayoutManager.findFirstVisibleItemPosition();                    suspension_bar.setY(0);                    //下面要添加更换header上控件值的方法                    updateHeader();                }            }        });        //下面要添加更换header上控件值的方法        updateHeader();    }

主要代码就这些,其他的和正常写recyclerview没什么区别.