22

Mam aktywność z CoordinatorLayout, AppBarLayout, CollapsingToolbarLayout i Toolbar. Tak więc, zasadniczo, widok, który zapada się podczas przewijania RecyclerView.Pokaż widok po zapadnięciu paska narzędzi

Co należy zrobić, to pokazać niestandardowy widok, gdy widok rozwiniętego układu jest ukryty z powodu zwijania.

To mój układ:

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

W końcu, gdy pasek narzędzi jest rozszerzony widok załadowany element jest wyświetlany. Kiedy jest zwinięty, nie robi tego. Gdy znika, należy pokazać TextView wewnątrz Toolbar. Obecnie pokazuje cały czas.

Szukałem w wydarzeniach CollapsingToolbarLayout, aby dodać detektor, gdy zmienia rozmiar, więc mogę sprawdzić, czy jest on mniejszy niż wartość i pokazać ten widok.

Może to być trudne do wytłumaczenia, ale uważam, że wyraziłem się jasno. Przeszukałem go i nie mogę znaleźć nikogo, kto próbowałby zrobić to samo.

+0

można po prostu użyć contentScrim? – tachyonflux

+0

@karaokyo the setContentScrim i jego odmiany są tylko dla rysunków i kolorów, chyba że czegoś mi brakuje. https://developer.android.com/reference/android/support/design/widget/CollapsingToolbarLayout.html –

Odpowiedz

50

Spojrzenie na źródło CollapsingToolbarLayout powoduje, że animacje treści treści są wywoływane przez OnOffsetChangedListener na AppBarLayout. Więc można dodać jeszcze jeden, aby wyzwolić animacji alfa na widoku tekstowego:

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); 
+0

Całkowicie zadziałało! Wielkie dzięki! Zważ na pytanie: patrzę na tę implementację 'CollapsibleToolbarLayout', ale jak dostałeś się do wartości' (2 * ViewCompat.getMinimumHeight (collapsingToolbar))? Jeszcze raz dziękuję –

+2

Jest to ten sam wyzwalacz, który używa siatki zawartości. – tachyonflux

+0

Dzięki za rozwiązanie @karaokyo Działa jak urok! Mimo że w przypadku urządzenia mobilnego jest ono w porządku, Twoje przypadki nie są uruchamiane na tablecie. Każdy pomysł, dlaczego tak jest? Dziękuję. – Suleiman19

Powiązane problemy