判断RecyclerView滑动到底部和顶部

方法1

mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {

            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);
                Log.i(TAG, "--------------------------------------");
                if(mRecyclerView.canScrollVertically(1)){
                    Log.i(TAG, "direction 1: true");
                }else {
                    Log.i(TAG, "direction 1: false");//滑动到底部
                }
                if(mRecyclerView.canScrollVertically(-1)){
                    Log.i(TAG, "direction -1: true");
                }else {
                    Log.i(TAG, "direction -1: false");//滑动到顶部
                }
            }
        });

方法2

mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {

            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);
                Log.i(TAG, "--------------------------------------");
                LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
                int firstCompletelyVisibleItemPosition = layoutManager.findFirstCompletelyVisibleItemPosition();
                Log.i(TAG, "firstCompletelyVisibleItemPosition: "+firstCompletelyVisibleItemPosition);
                if(firstCompletelyVisibleItemPosition==0)
                    Log.i(TAG, "滑动到顶部");

                int lastCompletelyVisibleItemPosition = layoutManager.findLastCompletelyVisibleItemPosition();
                Log.i(TAG, "lastCompletelyVisibleItemPosition: "+lastCompletelyVisibleItemPosition);
                if(lastCompletelyVisibleItemPosition==layoutManager.getItemCount()-1)
                    Log.i(TAG, "滑动到底部");
            }
        });
如果你想要实现 RecyclerView 顶部底部的圆角效果,并且在滑动 item 到顶部时不能出现直角,可以使用一个自定义的 ItemDecoration 来实现。 具体步骤如下: 1. 定义一个自定义的 ItemDecoration,重写 getItemOffsets() 方法,设置 RecyclerView 的 padding 值: ``` class CustomItemDecoration(private val margin: Int, private val radius: Int) : RecyclerView.ItemDecoration() { override fun getItemOffsets(outRect: Rect, view: View, parent: RecyclerView, state: RecyclerView.State) { super.getItemOffsets(outRect, view, parent, state) val pos = parent.getChildAdapterPosition(view) if (pos == 0) { outRect.top = radius } outRect.left = margin outRect.right = margin outRect.bottom = margin if (pos == state.itemCount - 1) { outRect.bottom = radius } } } ``` 2. 在 RecyclerView 的布局文件中,设置 RecyclerView 的背景为一个带有圆角的 ShapeDrawable,并且设置 RecyclerView 的 padding 为圆角大小: ``` <androidx.recyclerview.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/rounded_background" android:paddingTop="20dp" android:paddingBottom="20dp" /> ``` 3. 最后,在 RecyclerView 中设置自定义的 ItemDecoration: ``` val itemDecoration = CustomItemDecoration( resources.getDimensionPixelSize(R.dimen.margin), resources.getDimensionPixelSize(R.dimen.radius) ) recyclerView.addItemDecoration(itemDecoration) ``` 其中,margin 是 RecyclerView item 之间的间距,radius 是 RecyclerView 顶部底部的圆角大小。 通过这种方式,你可以实现 RecyclerView 顶部底部的圆角效果,并且在滑动 item 到顶部时不会出现直角。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值