RecyclerView如何判断是否滚动到底部

在开发过程中遇到recyclerView事件上下冲突问题,赶紧做了一下笔记;


从网上搜了很多有关recyclerView底部滑动,很多人都用第一种方案:


方案-、

public static boolean isVisBottom(RecyclerView recyclerView) {
    LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
    //屏幕中最后一个可见子项的position
    int lastVisibleItemPosition = layoutManager.findLastVisibleItemPosition();
    //当前屏幕所看到的子项个数
    int visibleItemCount = layoutManager.getChildCount();
    //当前RecyclerView的所有子项个数
    int totalItemCount = layoutManager.getItemCount();
    //RecyclerView的滑动状态
    int state = recyclerView.getScrollState();
    if (visibleItemCount > 0 && lastVisibleItemPosition == totalItemCount - 1 && state == recyclerView.SCROLL_STATE_IDLE) {
        return true;
    } else {
        return false;
    }
}


一种是否滚动到底部,方案二:


方案二:


public static boolean isBottomTouchEvent(MotionEvent event) {
    if (ev.getAction() == MotionEvent.ACTION_DOWN) {
        if (recyclerView == null) return false;
        if (recyclerView.computeVerticalScrollExtent() + recyclerView.computeVerticalScrollOffset()
                >= recyclerView.computeVerticalScrollRange())
        return true;
    }else{
            return false;
        }
        return false;
    }



------------------------------------------->>

由于我目前的功能出现了事件冲突,需要去处理滚动事件到顶部和底部后继续进行事件传递,

因此我采用了以下方案:


代码参考:

recyclerView=(RecyclerView)findViewById(R.id.recycler_vertical_view);
        LayoutManager=new LinearLayoutManager(this.getContext());
        LayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        LayoutManager.setRecycleChildrenOnDetach(true);
        recyclerView.setLayoutManager(LayoutManager);
        mData=new ArrayList<>();
        adapter=new myAdapter(this,mContext,mData);
        RecyclerList.setAdapter(adapter);



方案:1顶部:

public boolean isTopEvent(MotionEvent ev) {
    if(ev.getAction()==MotionEvent.ACTION_DOWN){
        //表示向上滚动,如果为false表示已经到顶部了.
        if (recyclerView.canScrollVertically(-1)) {
            return ture;
        } else {
            return false;
        }
    }
    return false;
}

方案:2底部:

public boolean isBottomEvent(MotionEvent ev) {
    if(ev.getAction()==MotionEvent.ACTION_DOWN){
        //表示向下滚动,如果为false表示已经到底部了.
        if (recyclerView.canScrollVertically(1)) {
            return true;
        } else {
            return false;
        }
    }
    return false;
}


在这就不详解canScrollVertically(),有兴趣的同学,可以查看源码;

------------------------------------------->>


以上是在自己研发过程遇到的问题,仅供参考谢谢;


参考http://www.jianshu.com/p/c138055af5d2

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值