2017-02-06 24 views
9

Tôi đã triển khai hành vi ẩn/hiển thị đơn giản cho nút tác vụ nổi.Hành động nút nổi (fab) ngừng hoạt động trênNestedScroll sau khi ẩn

Sự kiện onNestedScroll được gọi cho đến khi hide() hoặc setVisiblity (View.GONE) được gọi trên nút hành động thả nổi sau đó nó dừng phản ứng lại với các sự kiện cuộn. Dường như khi khả năng hiển thị của fab bị thay đổi thành GONE, nó dừng phản ứng lại với các sự kiện cuộn.

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

thông tin bổ sung: Khi tôi sử dụng thủ công chế độ hiển thị thành ẩn thì nó hoạt động. Nhưng sau đó tôi bị thiếu hoạt hình.

Trả lời

10

Có vẻ như nó có thể thay đổi hành vi của các ẩn anmation như đã mô tả ở đây: 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

Tôi nghĩ rằng đó là một sai lầm. Bạn nên gọi super onHidden() để thay thế –

Các vấn đề liên quan