1

Я хочу создать пользовательский вид, который будет дочерним элементом AppBarLayout. Мне нужно, чтобы эта точка зрения частично рушилась, когда я прокручиваю вверх, но не полностью. Он будет иметь минимальную высоту и останется фиксированным в верхней части AppBarLayout в режиме небольшого размера, а затем развернется обратно в режим большого размера, когда просмотр прокручивается вниз.Создать пользовательский дочерний элемент AppBarLayout с минимальной высотой?

Я потратил много времени на изучение источника AppBarLayout и CoordinatorLayout, и до сих пор я не вижу способа делать то, что хочу. Похоже, что дети AppBarLayout должны либо оставаться видимыми, либо полностью исчезнуть, когда прокручивается представление.

Может кто-нибудь предложить способ создания ребенка AppBarLayout, который будет вести себя таким образом?

Спасибо

ответ

1

Вот рецепт:

Если вы установили android:minHeight, то AppBarLayout будет уважать это значение, не прокручивая за того, что сделает ваш компонент меньше. Таким образом, ваш макет XML может быть что-то вроде этого:

<com.example.CustomCollapsingLayout 
     android:layout_width="match_parent" 
     android:layout_height="320dp" 
     android:minHeight="108dp" 
     android:fitsSystemWindows="true" 
     app:layout_scrollFlags="scroll|exitUntilCollapsed"> 

Далее вы хотите, чтобы ваш класс зарегистрировать OnOffsetChangedListener с родителем AppBarLayout. Ваш компонент будет получать события, поскольку панель приложений прокручивается, чтобы вы знали, как настроить свое представление.

class OnOffsetChangedListener implements AppBarLayout.OnOffsetChangedListener { 

     @Override 
     public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) { 

      final int scrollRange = appBarLayout.getTotalScrollRange(); 
      float offsetFactor = (float) (-verticalOffset)/(float) scrollRange; 
      ... 

Это показывает, как найти общий диапазон прокрутки, а затем найти отношение общего диапазона прокрутки и текущую позицию прокрутки т.е. где черта приложения находится в свитке.

Вы должны сделать то, что CollapsingToolbarLayout делает; переопределить onAttachedToWindow и добавить слушателя есть:

 // Add an OnOffsetChangedListener if possible 
     final ViewParent parent = getParent(); 
     if (parent instanceof AppBarLayout) { 
      if (mOnOffsetChangedListener == null) { 
       mOnOffsetChangedListener = new OnOffsetChangedListener(); 
      } 
      ((AppBarLayout) parent).addOnOffsetChangedListener(mOnOffsetChangedListener); 
     } 

Посмотрите на source code for CollapsingToolbarLayout, поскольку это даст вам некоторые идеи. Ваше мнение должно делать много чего.

Вы также можете посмотреть на мой образец проекта, который имеет изображение, которое масштабируется и перемещается как панели инструментов прокручивается: https://github.com/klarson2/Collapsing-Image

+0

Это работает, спасибо. Я читал о exitUntilCollapsed, но неправильно понял. – HansG600