標籤:
public abstract class RecyclerViewScrollListener extends RecyclerView.OnScrollListener { private static final int SCROLL_DISTANCE = 50; private int totalScrollDistance; private boolean isShow = true; @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); } @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); int firstVisableItem = ((LinearLayoutManager) recyclerView.getLayoutManager()).findFirstVisibleItemPosition(); //當第一個item存在介面上時就不觸發隱藏、顯示操作 if(firstVisableItem==0) { return; } if ((dy > 0 && isShow) || (dy < 0 && !isShow)) { totalScrollDistance += dy; } if (totalScrollDistance > SCROLL_DISTANCE && isShow) { hide(); isShow = false; totalScrollDistance = 0; } else if (totalScrollDistance < -SCROLL_DISTANCE && !isShow) { show(); isShow = true; totalScrollDistance = 0; } } public abstract void hide(); public abstract void show();}
隱藏和顯示事件處理
mRecyclerView.addOnScrollListener(new RecyclerViewScrollListener() { @Override public void hide() { mToolbar.animate().translationY(-mToolbar.getHeight()).setInterpolator(new AccelerateDecelerateInterpolator()); } @Override public void show() { mToolbar.animate().translationY(0).setInterpolator(new AccelerateDecelerateInterpolator());} });
效果:
xml布局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"><android.support.v7.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:paddingTop="?attr/actionBarSize" android:clipToPadding="false"android:layout_height="match_parent"/> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:background="#8803A9F4"android:layout_height="?actionBarSize" /> </RelativeLayout>
其中上面RecyclerView中有用到一個屬性:android:clipToPadding,這個屬性用的不多,這裡說明一下用法,這個屬性意思當就是當我們設定了paddingTop等屬性時候,用來設定列表的內容是否可以繪製在padding地區, 預設是true,表示不可以繪製在padding地區,false表示可以在padding地區繪製,如上顯示,列表地區本來是全屏的,而我設定了paddingTop為actionbar的高度,所以列表的內容會在actionbar下面,當往上滑動時候由於我設定了android:clipToPadding="false",所以可以繪製在padding地區,下面我如果把它設為true,android:clipToPadding="true",不覺明曆,肯定是上面有一塊padding的空白地區,來看看效果:
Android下拉上滑顯示與隱藏Toolbar另一種實現