RecyclerView实用功能(一)粘性头部

RecyclerView实用功能(一)粘性头部

前言

Android的日常开发中,RecyclerView绝对是个高频使用的控件,我们也经常碰到各种常见的需求,
比如粘性头部,多级列表等等,这会开一个系列,记录这些有关RecyclerView功能的实现方式。

效果

在这里插入图片描述

实现思路

思路很巧妙,也很简单,在RecyclerView外部容器添加一个HeaderView,然后RecyclerView每一个Item
添加相同的HeaderView。第一个Item显示HeaderView,后面的Item根据需求决定Item显示与否。
最关键的操作步骤是,控制外部HeaderView如何显示,当Iiem移动到外部HeaderView下面时,
相应要控制外部HeaderView一起移动,给RecyclerView添加滑动监听即可:

private class ScrollListener extends RecyclerView.OnScrollListener {
        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            super.onScrolled(recyclerView, dx, dy);
            View view = recyclerView.getChildAt(0);
            if(view != null && view.getContentDescription() != null) {
                stickyHeader.setVisibility(View.VISIBLE);
                tvHeader.setText(String.valueOf(view.getContentDescription()));
            }
            View underView =
                    recyclerView.findChildViewUnder(stickyHeader.getMeasuredWidth() / 2
                            , stickyHeader.getMeasuredHeight() + 1);//获取位于头部下方的itemView
            if(underView != null && underView.getTag() != null) {
                int tag = (int) underView.getTag();
                int deltaY = underView.getTop() - stickyHeader.getMeasuredHeight();
                if(tag == ItemAdapter.HAS_STICKY_VIEW) {//当该item显示头部
                    if(underView.getTop() > 0) {//当该item还未移出RecyclerView
                        stickyHeader.setTranslationY(deltaY); //移动头部
                    } else {//当Item移出顶部,粘性头部复原
                        stickyHeader.setTranslationY(0);
                    }
                } else {//当Item不包含粘性头部时
                    stickyHeader.setTranslationY(0);
                }
            }
        }
    }
代码实现

下面给出具体的代码实现方式,项目源码已上传GitHub

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值