1

Ich möchte eine benutzerdefinierte Ansicht erstellen, die ein Kind eines AppBarLayout wird. Ich brauche diese Ansicht, um teilweise zu zerfallen, wenn ich nach oben scrolle, aber nicht vollständig. Es wird eine minimale Höhe haben und am oberen Rand des AppBarLayout im kleinen Größenmodus fixiert bleiben und dann wieder in den großen Größenmodus expandieren, wenn die Ansicht zurückgescrollt wird.Erstellen Sie ein benutzerdefiniertes AppBarLayout-Kind mit minimaler Höhe?

Ich habe viel Zeit damit verbracht, durch die Quelle von AppBarLayout und CoordinatorLayout zu schauen, und bis jetzt sehe ich keinen Weg, das zu tun, was ich will. Es sieht so aus, als ob Kinder von AppBarLayout entweder sichtbar bleiben oder vollständig verschwinden müssen, wenn die Ansicht nach oben gescrollt wird.

Kann jemand einen Weg vorschlagen, ein Kind eines AppBarLayout zu erstellen, das sich so verhält?

Danke

Antwort

1

Hier ist das Rezept:

Wenn Sie android:minHeight gesetzt ist, wird der AppBarLayout diesen Wert achten, indem sie nicht über den Punkt hinaus scrollen, die Ihre Komponente kleiner machen würde. So Ihr XML-Layout könnte wie folgt sein:

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

Weiter Sie Ihre Klasse ein OnOffsetChangedListener mit der Mutter AppBarLayout registrieren haben wollen. Ihre Komponente erhält Ereignisse, wenn die App-Leiste gescrollt wird, damit Sie wissen, wie Sie Ihre Ansicht konfigurieren.

class OnOffsetChangedListener implements AppBarLayout.OnOffsetChangedListener { 

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

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

Dies zeigen Ihnen, wie den gesamten Scroll-Bereich zu finden und dann das Verhältnis zwischen dem Gesamt Scroll-Bereich und der aktuellen Bildlaufposition das heißt, wo die App-Leiste in seiner Rolle ist.

Sie sollten tun, was CollapsingToolbarLayout tut; außer Kraft setzen onAttachedToWindow und fügen Sie dort den Hörer:

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

am source code for CollapsingToolbarLayout Werfen Sie einen Blick, wie es Ihnen einige Ideen geben. Ihre Ansicht muss viele der gleichen Dinge tun.

Sie können auch an meinem Beispielprojekt aussehen, die ein Bild hat, die als die Symbolleiste skaliert und bewegt gescrollt wird: https://github.com/klarson2/Collapsing-Image

+0

, dass dank funktioniert. Ich hatte über exitUntilCollapse gelesen, aber es falsch verstanden. – HansG600

Verwandte Themen