android - poner - Mostrar vista cuando la barra de herramientas se colapsa
google toolbar chrome (1)
Tengo una actividad con CoordinatorLayout
, AppBarLayout
, CollapsingToolbarLayout
y Toolbar
. Entonces, básicamente, una vista que se colapsa cuando se desplaza un RecyclerView
.
Lo que necesito hacer es mostrar una vista personalizada cuando la vista del diseño expandido está oculta debido al colapso.
Este es mi diseño:
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="192dp"
android:fitsSystemWindows="true"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
app:contentScrim="#2196F3"
app:expandedTitleMarginBottom="32dp"
app:expandedTitleMarginEnd="64dp"
app:expandedTitleMarginStart="48dp"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<include
android:id="@+id/header"
layout="@layout/header_big_first_screen"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:scaleType="centerCrop"
app:layout_collapseMode="parallax"/>
<android.support.v7.widget.CollapsingToolbarLayout
android:id="@+id/anim_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_collapseMode="pin"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="Hello!"/>
</android.support.v7.widget.CollapsingToolbarLayout>
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/categories_recyclerview"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
</android.support.design.widget.CoordinatorLayout>
Al final, cuando la barra de herramientas se expande, se muestra la vista cargada con el elemento. Cuando está colapsado no lo hace. Cuando desaparezca, se debe mostrar TextView
dentro de la Toolbar
. Actualmente se muestra todo el tiempo.
He estado buscando en los eventos de CollapsingToolbarLayout
para agregar un oyente cuando cambia de tamaño para poder verificar si es más pequeño que un valor y mostrar esa vista.
Esto puede ser un poco difícil de explicar, pero creo que me aclaré. He estado buscando en Google y no puedo encontrar a nadie tratando de hacer lo mismo.
Echando un vistazo a la fuente CollapsingToolbarLayout
, las animaciones de contenido se activan a través de un OnOffsetChangedListener
en el AppBarLayout
. Así que puedes agregar otra para activar animaciones alfa en tu vista de texto:
mListener = new AppBarLayout.OnOffsetChangedListener() {
@Override
public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
if(collapsingToolbar.getHeight() + verticalOffset < 2 * ViewCompat.getMinimumHeight(collapsingToolbar)) {
hello.animate().alpha(1).setDuration(600);
} else {
hello.animate().alpha(0).setDuration(600);
}
}
};
appBar.addOnOffsetChangedListener(mListener);