Как я могу определить, что CollapsingToolbar рухнул?

Мне нужно знать, когда CollapsingToolbar из библиотеки материалов будет свернута.

ОБНОВЛЕНИЕ : Поскольку версии поддержки версии 23.1.1+ больше не существуют, не нужно использовать прослушиватель и отключить макет обновления салфетки, он будет работать так, как должен ( ссылка ).


Внедрите слушатель AppBarLayout.OnOffsetChangedListener в своем AppBarLayout

AppBarLayout appBarLayout = (AppBarLayout) view.findViewById(R.id.app_bar_layout); appBarLayout.addOnOffsetChangedListener(this); 

И проверьте, если смещение равно 0, то есть панель инструментов рухнула.

 @Override public void onOffsetChanged(AppBarLayout appBarLayout, int offset) { if (offset == 0) { // Collapsed } else { // Not collapsed } } 

Взгляните на этот github gist

 public class MyAppBarLayout extends AppBarLayout implements AppBarLayout.OnOffsetChangedListener { private State state; private OnStateChangeListener onStateChangeListener; public MyAppBarLayout(Context context) { super(context); } public MyAppBarLayout(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); if (!(getLayoutParams() instanceof CoordinatorLayout.LayoutParams) || !(getParent() instanceof CoordinatorLayout)) { throw new IllegalStateException( "MyAppBarLayout must be a direct child of CoordinatorLayout."); } addOnOffsetChangedListener(this); } @Override public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) { if (verticalOffset == 0) { if (onStateChangeListener != null && state != State.EXPANDED) { onStateChangeListener.onStateChange(State.EXPANDED); } state = State.EXPANDED; } else if (Math.abs(verticalOffset) >= appBarLayout.getTotalScrollRange()) { if (onStateChangeListener != null && state != State.COLLAPSED) { onStateChangeListener.onStateChange(State.COLLAPSED); } state = State.COLLAPSED; } else { if (onStateChangeListener != null && state != State.IDLE) { onStateChangeListener.onStateChange(State.IDLE); } state = State.IDLE; } } public void setOnStateChangeListener(OnStateChangeListener listener) { this.onStateChangeListener = listener; } public interface OnStateChangeListener { void onStateChange(State toolbarChange); } public enum State { COLLAPSED, EXPANDED, IDLE } } 

Как сказал Марко, это может быть достигнуто с помощью собственной реализации OnOffsetChangedListener.

 AppBarLayout appBarLayout = (AppBarLayout) view.findViewById(R.id.app_bar_layout); appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() { @Override public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) { if (Math.abs(verticalOffset) == appBarLayout.getTotalScrollRange()) { // Collapsed } else if (verticalOffset == 0) { // Expanded } else { // Somewhere in between } } }););