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位置,
}}
