RecycleView 获取当前所显示item的总高度

RecycleView 实现 RecyclerView.OnScrollListener。

RecyclerView.OnScrollListener onScrollListener = new RecyclerView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
                super.onScrollStateChanged(recyclerView, newState);
                RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager();
                // 判断是当前layoutManager是否为LinearLayoutManager
                // 只有LinearLayoutManager才有查找第一个和最后一个可见view位置的方法
                if (layoutManager instanceof LinearLayoutManager) {
                    LinearLayoutManager linearManager = (LinearLayoutManager) layoutManager;
                    //获取第一个可见view的位置
                    int firstItemPosition = linearManager.findFirstVisibleItemPosition();
                    //获取最后一个可见view的位置
                    int lastItemPosition = linearManager.findLastVisibleItemPosition();
                    Log.d("onScrollStateChanged", "firstItemPosition: " + firstItemPosition);
                    Log.d("onScrollStateChanged", "lastItemPosition: " + lastItemPosition);
                    int full = lastItemPosition - firstItemPosition;
                    int visibleHeight = 0;
                    for (int i = 0; i <= full; i++) {
                        View view = recyclerView.getChildAt(i);
                        Log.d("onScrollStateChanged", "i: " + i);
                        if (null == view) {
                            continue;
                        }
                        //  包含被遮挡的部分
                        int[] location = new int[2];
                        view.getLocationOnScreen(location);
                        Log.d("onScrollStateChanged", "location: " + Arrays.toString(location));
                        //  不包含被遮挡的部分 
                        Rect localRect = new Rect();
                        view.getLocalVisibleRect(localRect);
                        Log.d("onScrollStateChanged", "localRect: " + localRect.toString());
                        int showHeight = localRect.bottom - localRect.top;
                        visibleHeight += showHeight;
                    }
                    // visibleHeight 使用getLocalVisibleRect获取的是显示的高度,
                    // 当子控件铺满时,visibleHeight 的高度等同于recycleView的高度
                    int height = recyclerView.getHeight();
                    Log.d("onScrollStateChanged", "visionHeight: " + visibleHeight);
                    Log.d("onScrollStateChanged", "height: " + height);
                }
            }

            @Override
            public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);
            }
        };
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值