2017-02-06 25 views
9

Zaimplementowałem proste zachowanie ukrywania/pokazu dla przycisku akcji pływającej.Zachowanie przycisku akcji pływającej (fab) zatrzymuje się naNestedScroll po ukryciu

Zdarzenie onNestedScroll jest wywoływane, dopóki funkcja hide() lub setVisiblity (View.GONE) nie zostanie wywołana na pływającym przycisku akcji, a następnie przestanie reagować na zdarzenia przewijania. Wygląda na to, że widoczność bajek zostanie zmieniona na GONE, ale przestaje reagować na zdarzenia przewijania.

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(); 
      } 
     } 
    } 
} 

informacje dodatkowe: kiedy używać ręcznie ustawić visiblity Niewidoczny to działa. Ale potem brakuje mi animacji.

Odpowiedz

10

Wydaje się, że to możliwe, aby zmienić zachowanie ukryj anmation jak opisano tutaj: 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

myślę, że to pomyłka. Zamiast tego należy wywołać super onHidden() –