1

NestedScrollViewがスクロールダウンしたときにFloatingActionButtonを非表示にしようとしています。ここでカスタムauto hide floatingActionButtonビヘイビアが動作しません。

は私のレイアウトです:

<android.support.design.widget.CoordinatorLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true"> 

    <android.support.design.widget.AppBarLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:fitsSystemWindows="true"> 

     <android.support.design.widget.CollapsingToolbarLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:fitsSystemWindows="true" 
      app:layout_scrollFlags="scroll|enterAlways"> 
     </android.support.design.widget.CollapsingToolbarLayout> 
    </android.support.design.widget.AppBarLayout> 

    <android.support.v4.widget.NestedScrollView 
     app:layout_behavior="@string/appbar_scrolling_view_behavior"/> 

    <android.support.design.widget.FloatingActionButton 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_margin="@dimen/grid_2" 
     android:layout_gravity="bottom|end" 
     android:src="@drawable/ic_place_white" 
     android:clickable="true" 
     app:backgroundTint="@color/colorPrimary" 
     app:layout_behavior="com.myapp.ScrollAnimationFAB"/> 
</android.support.design.widget.CoordinatorLayout> 

そして、ここでは私のfloatingActionButtonの動作です:

public class ScrollAnimationFAB extends FloatingActionButton.Behavior { 

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

    @Override 
    public boolean onStartNestedScroll(CoordinatorLayout coordinatorLayout, FloatingActionButton child, View directTargetChild, View target, 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(); 
     } 
    } 
} 

これらのコードは、それがNestedScrollViewの行動とは何かを持っている場合、私は疑問に思う、私のために働いていません。どんな助けもありがとう!

UPDATE

私は、有線何かを見つけました!私がfabのメソッド(child.hide()、child.show())をonNestedScrollで呼び出すと、onStartNestedScrollとonNestedScrollは決して再び呼び出されませんが、fabのメソッドを呼び出さなかった場合、onStartNestedScrollとonNestedScrollは正常に呼び出されます。ボタンの視認性がGONEある場合

答えて

9

onNestedScrollかなりのhere

を言っている@woxingxiaoを見てみましょうが解雇されません。だから、交換してください:

child.hide(); 

へ:

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

は、それが働いていた、ありがとう!ところで、dyConsumedは常に0なので、代わりにdyUnconsumedをチェックする必要があります。 – fantasticKB

関連する問題