Ocultar / Mostrar bottomNavigationView en Scroll

Tengo que ocultar la vista de navegación inferior en desplazamiento ascendente y mostrar en desplazamiento hacia abajo. ¿Cómo implementar esto? mi diseño es así

       

He adjuntado una captura de pantalla de vista. Por favor verifíquelo.

enter image description here

ACTUALIZAR

Actualice a la versión más reciente de la biblioteca de soporte 28.0.0-alpha1 y simplemente agregue un atributo a BottomNavigationView .

  

Nota : – Su XML debe seguir la estructura de XML dada a continuación en la respuesta anterior.

ANTIGUA RESPUESTA (todavía funciona)

Necesita una clase de ayuda para hacer esto. Esta solución funciona como la Guía de diseño de materiales de Google.

Crear una clase BottomNavigationViewBehavior

 public class BottomNavigationViewBehavior extends CoordinatorLayout.Behavior { private int height; @Override public boolean onLayoutChild(CoordinatorLayout parent, BottomNavigationView child, int layoutDirection) { height = child.getHeight(); return super.onLayoutChild(parent, child, layoutDirection); } @Override public boolean onStartNestedScroll(@NonNull CoordinatorLayout coordinatorLayout, BottomNavigationView child, @NonNull View directTargetChild, @NonNull View target, int axes, int type) { return axes == ViewCompat.SCROLL_AXIS_VERTICAL; } @Override public void onNestedScroll(@NonNull CoordinatorLayout coordinatorLayout, @NonNull BottomNavigationView child, @NonNull View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed, @ViewCompat.NestedScrollType int type) { if (dyConsumed > 0) { slideDown(child); } else if (dyConsumed < 0) { slideUp(child); } } private void slideUp(BottomNavigationView child) { child.clearAnimation(); child.animate().translationY(0).setDuration(200); } private void slideDown(BottomNavigationView child) { child.clearAnimation(); child.animate().translationY(height).setDuration(200); } } 

Para usar este comportamiento, debe usar el diseño de cooradinator ...

            

Agregue este código a su actividad que contiene el navegador inferior ..

 mBottomNavigationView = (BottomNavigationView) findViewById(R.id.bottom_nav); CoordinatorLayout.LayoutParams layoutParams = (CoordinatorLayout.LayoutParams) mBottomNavigationView.getLayoutParams(); layoutParams.setBehavior(new BottomNavigationViewBehavior()); 

Prueba esto,

  mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { if (dy > 0 && bottom_navigation.isShown()) { bottom_navigation.setVisibility(View.GONE); } else if (dy < 0 ) { bottom_navigation.setVisibility(View.VISIBLE); } } @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); } }); 

Imagen mientras se desplaza hacia arriba: -

haga clic aquí para desplazarse por la imagen

Imagen mientras se desplaza hacia abajo:

haga clic aquí para desplazarse por la imagen

Utilizar esta

 mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { if (dy > 0 ||dy<0 && csButtonLay.isShown()) { bottomBar.setVisibility(View.GONE); } } @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { if (newState == RecyclerView.SCROLL_STATE_IDLE) { bottomBar.setVisibility(View.VISIBLE); } super.onScrollStateChanged(recyclerView, newState); } }); 

Respuesta actualizada después de las últimas actualizaciones de la biblioteca :

¡ BottomNavigationView la BottomNavigationView de BottomNavigationView ahora está disponible con solo una bandera en el diseño! A partir de la versión 28.0.0-alpha1 o del material / androidX 1.0.0-alpha1 .

Actualicé mi proyecto utilizando el último enfoque ya que la versión ahora está en la versión candidata de lanzamiento estable "1.0.0-rc01" .

El nuevo comportamiento disponible fuera de la caja se llama HideBottomViewOnScrollBehavior . BottomNavigationView en la app:layout_behavior="@string/hide_bottom_view_on_scroll_behavior" BottomNavigationView como app:layout_behavior="@string/hide_bottom_view_on_scroll_behavior" como se describe en los últimos documentos .

Aquí hay un ejemplo completo:

  

Al igual que con la ocultación de la Barra de herramientas al desplazarse, debe asegurarse de que el contenido sea una clase que admita el desplazamiento más reciente, como RecyclerView y NestedScrollView .

Esto asegura que todo está funcionando como se muestra en la animación en las especificaciones de diseño

PD: labelVisibilityMode es otra adición interesante que obtienes de forma gratuita por tomarse la molestia de actualizar y que se describe en profundidad en las especificaciones de diseño .

Cuando estoy scrolllerlerview en el lado superior. enter image description here