recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); RecyclerView.LayoutManager manager = recyclerView.getLayoutManager();//获取LayoutManager if (manager != null && manager instanceof LinearLayoutManager){ //第一个可见的位置 int firstPosition = ((LinearLayoutManager) manager).findFirstVisibleItemPosition(); //如果 dx>0 则表示 右滑 ,dx<0 表示 左滑,dy <0 表示 上滑, dy>0 表示下滑 if (dy<0){ //上滑监听 topBar.setVisibility(firstPosition>1 ? View.VISIBLE : View.GONE); }else{ //下滑监听 topBar.setVisibility(firstPosition==0 ? View.GONE : View.VISIBLE); } } } });
其他方法:
//此方法常用作判断是否能下拉刷新,来解决滑动冲突 int findFirstCompletelyVisibleItemPosition = ((LinearLayoutManager)manager).findFirstCompletelyVisibleItemPosition(); //最后一个完整的可见的item位置 int findLastCompletelyVisibleItemPosition = ((LinearLayoutManager)manager).findLastCompletelyVisibleItemPosition(); //最后一个可见的位置 int findLastVisibleItemPosition = ((LinearLayoutManager)manager).findLastVisibleItemPosition();
获取指定位置的view
new Handler().postDelayed(new Runnable() { @Override public void run() { View view = mLayoutManager.findViewByPosition(2); //2为recyclerView中item位置, }}