Т.к. для разметки у вас используется CoordinatorLayout, то лёгкий способ:
Добавляем одну строчку в описании Toolbar:
<android.support.v7.widget.Toolbar
android:id = "@+id/toolbar"
android:layout_width = "match_parent"
android:theme="@style/ThemeOverlay.AppCompat.Dark"
android:layout_height = "?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:layout_scrollFlags="scroll|enterAlways"
/>
или то же самое делаем в коде, когда инициализируем toolbar:
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
AppBarLayout.LayoutParams params = (AppBarLayout.LayoutParams) toolbar.getLayoutParams();
params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL | AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS);
Если нужна более тонкая настройка анимации, придется вручную:
Например, у вас список listView и appbar, который нужно прятать или снова показывать когда крутим список.
Получаем список, получаем appbar... Например, так:
appbar = (AppBarLayout) getActivity().findViewById(R.id.appbar_layout);
Слушаем скролл списка и запускаем соответствующую анимацию:
listView.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
if (view.getId() == listView.getId()) {
final int currentFirstVisibleItem = listView.getFirstVisiblePosition();
if (currentFirstVisibleItem > mLastFirstVisibleItem) {
//прячем appbar
appbar.animate().translationY(-appbar.getBottom()).setInterpolator(new AccelerateInterpolator()).start();
} else if (currentFirstVisibleItem < mLastFirstVisibleItem) {
//возвращаем на место...
appbar.animate().translationY(0).setInterpolator(new DecelerateInterpolator()).start();
}
mLastFirstVisibleItem = currentFirstVisibleItem;
}
}
});