为recyclerview添加悬浮view

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没什么区别.



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值