with layout_collapsemode example ejemplo coordinatorlayout collapsing appbarlayout android android-design-library android-collapsingtoolbarlayout

android - layout_collapsemode - ¿Cómo puedo determinar que CollapsingToolbar está colapsado?



coordinatorlayout (3)

Como dijo Marko, esto se puede lograr usando su propia implementación de un 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 } } }););

Necesito saber cuándo colapsó CollapsingToolbar de la biblioteca de diseño de materiales.


Echa un vistazo sobre esta esencia github

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 } }


ACTUALIZACIÓN : Dado que las versiones de soporte de 23.1.1+ ya no existen, no es necesario utilizar el oyente y desactivar el diseño de actualización de deslizamiento, funcionará como debería ( link ).

Implemente el escucha AppBarLayout.OnOffsetChangedListener en su AppBarLayout

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

Y verifique si el desplazamiento es 0, lo que significa que la barra de herramientas está totalmente expandida.

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