22

У меня есть деятельность с CoordinatorLayout, AppBarLayout, CollapsingToolbarLayout и Toolbar. Итак, в основном, представление, которое рушится при прокрутке RecyclerView.Показать, когда сворачивается панель инструментов

Что мне нужно сделать, так это показать пользовательский вид, когда вид расширенного макета скрыт из-за смятия.

Это мой макет:

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

В конце концов, когда панель инструментов расширяются вид с загруженным показан элементом. Когда он рухнет, это не так. Когда он исчезнет, ​​следует указать TextView внутри Toolbar. В настоящее время он показывает все время.

Я искал события CollapsingToolbarLayout, чтобы добавить слушателя, когда он меняет размер, поэтому я могу проверить, меньше ли это значения и показать это представление.

Это может быть довольно сложно объяснить, но я считаю, что я ясно дал понять. Я искал поиски и не мог найти никого, пытающегося сделать то же самое.

+0

Не могли бы вы использовать contentScrim? – tachyonflux

+0

@karaokyo setContentScrim и его варианты предназначены только для чертежей и цветов, если только у меня что-то не хватает. https://developer.android.com/reference/android/support/design/widget/CollapsingToolbarLayout.html –

ответ

50

Если вы посмотрите на источник CollapsingToolbarLayout, анимация анимации контента запускается через OnOffsetChangedListener на AppBarLayout. Таким образом, вы можете добавить еще один, чтобы вызвать альфа-анимацию в вашем текстовом виде:

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

Полностью сработал! Большое спасибо! Помните вопрос: я смотрю на эту реализацию 'CollapsibleToolbarLayout', но как вы добрались до значения' (2 * ViewCompat.getMinimumHeight (collapsingToolbar)) '? Еще раз спасибо –

+2

Это тот же самый триггер, который использует контент-скриншот – tachyonflux

+0

Спасибо за решение @karaokyo Работает как шарм! Однако, несмотря на то, что на мобильном устройстве это нормально, ваши случаи, если еще не срабатывают на планшете, не срабатывают. Любая идея, почему? Спасибо. – Suleiman19

Смежные вопросы