Android CollapsingToolbarLayout colapse Listener
Estoy utilizando CollapsingToolBarLayout
junto con AppBarLayout
y CoordinatorLayout
, y están trabajando bien por completo. Puse mi Toolbar
de Toolbar
para ser fijado cuando me desplácese para arriba, quiero saber si hay una manera de cambiar el texto del título de la barra de herramientas, cuando CollapsingToolBarLayout
él es derrumbado.
Embalaje, quiero dos títulos diferentes cuando se desplaza y cuando se amplía .
- Cheesesquare: enterAlways produce un diseño incorrecto
- Colapsar el diseño de la barra de herramientas con el logotipo, el título, el subtítulo en la barra de herramientas
- Detener CollapsingToolbar de colapso después de NestedScrollView se queda sin contenido para desplazarse
- Las transiciones de elementos compartidos no funcionan cuando se combinan con un CoordinatorLayout y CollapsingToolbarLayout
- CollapsingToolbarLayout no funciona correctamente
Gracias a todos de antemano
- Cómo eliminar programaticamente un comportamiento de diseño de mi NestedScrollView?
- CoordinatorLayout deja espacio vacío en la parte inferior después de desplazarse
- setfitsystemwindows no funciona windowtranslucentstatus coordinatorlayout
- CollapsingToolbarLayout ImageView no se puede desplazar
- Collapsing Toolbar con la imagen de url?
- CollapsingToolbarLayout | Aspectos de desplazamiento y diseño
- Viewpager no se desplaza en el diseño del coordinador
- ¿Cómo cambiar la propiedad y el tamaño de CollapsingToolbarLayout?
Comparto la implementación completa, basada en @Frodio Beggins y código @Nifhel:
public abstract class AppBarStateChangeListener implements AppBarLayout.OnOffsetChangedListener { public enum State { EXPANDED, COLLAPSED, IDLE } private State mCurrentState = State.IDLE; @Override public final void onOffsetChanged(AppBarLayout appBarLayout, int i) { if (i == 0) { if (mCurrentState != State.EXPANDED) { onStateChanged(appBarLayout, State.EXPANDED); } mCurrentState = State.EXPANDED; } else if (Math.abs(i) >= appBarLayout.getTotalScrollRange()) { if (mCurrentState != State.COLLAPSED) { onStateChanged(appBarLayout, State.COLLAPSED); } mCurrentState = State.COLLAPSED; } else { if (mCurrentState != State.IDLE) { onStateChanged(appBarLayout, State.IDLE); } mCurrentState = State.IDLE; } } public abstract void onStateChanged(AppBarLayout appBarLayout, State state); }
Y entonces usted puede utilizarlo:
appBarLayout.addOnOffsetChangedListener(new AppBarStateChangeListener() { @Override public void onStateChanged(AppBarLayout appBarLayout, State state) { Log.d("STATE", state.name()); } });
OnOffsetChangedListener
un OnOffsetChangedListener
a su AppBarLayout
. Cuando verticalOffset
alcanza 0 o leq que altura de la Toolbar
de Toolbar
, significa que CollapsingToolbarLayout ha colapsado, de lo contrario se está expandiendo o expandiendo.
mAppBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() { @Override public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) { if(verticalOffset == 0 || verticalOffset <= mToolbar.getHeight() && !mToolbar.getTitle().equals(mCollapsedTitle)){ mCollapsingToolbar.setTitle(mCollapsedTitle); }else if(!mToolbar.getTitle().equals(mExpandedTitle)){ mCollapsingToolbar.setTitle(mExpandedTitle); } } });
Esta solución perfectamente trabajando para mí para detectar el diseño de la barra de aplicaciones colapsado o ampliado.
appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() { @Override public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) { if (Math.abs(verticalOffset)-appBarLayout.getTotalScrollRange() == 0) { // Collapsed } else { //Expanded } } });
Se utiliza addOnOffsetChangedListener en AppBarLayout.
Este código funcionó para mí
mAppBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() { @Override public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) { if (verticalOffset == -mCollapsingToolbarLayout.getHeight() + mToolbar.getHeight()) { //toolbar is collapsed here //write your code here } } });
private enum State { EXPANDED, COLLAPSED, IDLE } private void initViews() { mAppBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() { private State state; @Override public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) { if (verticalOffset == 0) { if (state != State.EXPANDED) { ... } state = State.EXPANDED; } else if (Math.abs(verticalOffset) >= appBarLayout.getTotalScrollRange()) { if (state != State.COLLAPSED) { ... } state = State.COLLAPSED; } else { if (state != State.IDLE) { ... } state = State.IDLE; } } }); }
Esta solución está funcionando para mí:
@Override public void onOffsetChanged(AppBarLayout appBarLayout, int i) { if (i == 0) { if (onStateChangeListener != null && state != State.EXPANDED) { onStateChangeListener.onStateChange(State.EXPANDED); } state = State.EXPANDED; } else if (Math.abs(i) >= 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; } }
Utilice addOnOffsetChangedListener en AppBarLayout.
Puede obtener el porcentaje de alfa de collapsingToolBar a continuación:
appbarLayout.addOnOffsetChangedListener( new AppBarLayout.OnOffsetChangedListener() { @Override public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) { float percentage = ((float)Math.abs(verticalOffset)/appBarLayout.getTotalScrollRange()); fadedView.setAlpha(percentage); });
Para Referencia: link
Si está utilizando CollapsingToolBarLayout puede poner esto
collapsingToolbar.setExpandedTitleColor(ContextCompat.getColor(activity, android.R.color.transparent)); collapsingToolbar.setTitle(title);
Este código está funcionando perfecto para mí. Puedes usar la escala de porcentaje Cómo te gusta
@Override public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) { double percentage = (double) Math.abs(verticalOffset) / collapsingToolbar.getHeight(); if (percentage > 0.8) { collapsingToolbar.setTitle("Collapsed"); } else { collapsingToolbar.setTitle("Expanded"); } }