1

我想創建一個自定義視圖,它將是AppBarLayout的子視圖。當我向上滾動時,我需要這個視圖部分地崩潰,但不完全。它將具有最小高度,並保持固定在AppBarLayout的小尺寸模式的頂部,然後當視圖向下滾動時再擴展回它的大尺寸模式。用最小高度創建自定義AppBarLayout子項?

我花了很多時間瀏覽AppBarLayout和CoordinatorLayout的源代碼,到目前爲止我沒有看到一種方法來做我想做的事。它看起來像AppBarLayout的孩子必須保持可見或完全消失當視圖向上滾動。

任何人都可以建議一種方法來創建一個AppBarLayout的行爲會這樣嗎?

謝謝

回答

1

這裏的食譜:

如果設置android:minHeight,該AppBarLayout將尊重不滾動超出這將使你的組件更小的點值。所以你的XML佈局可能是這樣的:你希望你的註冊類與父AppBarLayout一個OnOffsetChangedListener

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

下一步。隨着應用欄的滾動,您的組件將獲得事件,以便您知道如何配置視圖。

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