2017-02-06 1 views
9

Ich implementiert ein einfaches Verbergen/Anzeigen Verhalten für die unverankerte Aktion Schaltfläche.Floating-Aktion Schaltfläche (fab) Verhalten stoppt onNestedScroll nach ausblenden

Das onNestedScroll-Ereignis wird aufgerufen, bis hide() oder setVisiblity (View.GONE) auf der schwebenden Aktionstaste aufgerufen wird, dann reagiert es nicht mehr auf Bildlaufereignisse. Es scheint, wenn die Fab-Sichtbarkeit auf GONE geändert wird, reagiert sie nicht mehr auf Scroll-Ereignisse.

public class ScrollAwareFABBehavior extends FloatingActionButton.Behavior { 

public ScrollAwareFABBehavior(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 


@Override 
public boolean onStartNestedScroll(final CoordinatorLayout coordinatorLayout, 
            final FloatingActionButton child, 
            final View directTargetChild, final View target, 
            final int nestedScrollAxes) { 

    return nestedScrollAxes == ViewCompat.SCROLL_AXIS_VERTICAL 
      || super.onStartNestedScroll(coordinatorLayout, child, directTargetChild, target, nestedScrollAxes); 
} 

@Override 
public void onNestedScroll(CoordinatorLayout coordinatorLayout, FloatingActionButton child, 
          View target, int dxConsumed, int dyConsumed, int dxUnconsumed, 
          int dyUnconsumed) { 
    super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, dxUnconsumed, 
      dyUnconsumed); 

    if (dyConsumed > 0 
      && child.getVisibility() == View.VISIBLE) { 
     child.hide(); 
    } else if (dyConsumed < 0 
      && child.getVisibility() != View.VISIBLE) { 
       child.show(); 
      } 
     } 
    } 
} 

weitere Informationen: Wenn ich manuell die visiblity unsichtbar gesetzt verwenden es funktioniert. Aber dann fehlt mir die Animation.

Antwort

10

Scheint, wie es möglich ist, das Verhalten der Haut anmation zu ändern, wie hier beschrieben: https://stackoverflow.com/a/41386278/1038102

child.hide(new FloatingActionButton.OnVisibilityChangedListener() 
     @Override 
     public void onHidden(FloatingActionButton fab) { 
      super.onHidden(fab); 
      fab.setVisibility(View.INVISIBLE); 
     } 
    }); 
+0

Ich denke, es ist ein Fehler. Sie sollten stattdessen super onHidden() aufrufen –

Verwandte Themen