J'ai une activité avec un CoordinatorLayout
, AppBarLayout
, CollapsingToolbarLayout
et Toolbar
. Donc, en gros, une vue qui s'effondre lors du défilement d'un RecyclerView
.
Ce que je dois faire est d'afficher une vue personnalisée lorsque la vue de la disposition développée est masquée en raison de l'effondrement.
Voici ma mise en page:
<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>
Au final, lorsque la barre d'outils est développée, la vue chargée avec l'élément est affichée. Quand il est effondré, ce n'est pas le cas. Lorsqu'il disparaît, le TextView
à l'intérieur du Toolbar
devrait être affiché. Actuellement, il montre tout le temps.
J'ai cherché dans les événements de CollapsingToolbarLayout
pour ajouter un écouteur quand il change de taille afin que je puisse vérifier si c'est plus petit qu'une valeur et montrer cette vue.
Cela peut être un peu difficile à expliquer, mais je crois que je me suis bien fait comprendre. J'ai fait des recherches sur Google et je ne trouve personne qui essaie de faire de même.
En jetant un œil à la source CollapsingToolbarLayout
, les animations de canevas de contenu sont déclenchées via un OnOffsetChangedListener
sur le AppBarLayout
. Vous pouvez donc en ajouter un autre pour déclencher des animations alpha sur votre vue texte:
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);