国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android自定義FloatingActionButton滑動行為只隱藏不出現的問題小結

2019-12-12 04:08:59
字體:
來源:轉載
供稿:網友

先來段Behavior代碼,網上關于FloatingActionButton(以下簡稱FAB)滑動的代碼很多了,參考一下。

public class FabBehavior extends FloatingActionButton.Behavior{  private static final Interpolator INTERPOLATOR = new FastOutSlowInInterpolator();  private boolean mIsAnimatingOut = false;  public FabBehavior(Context context, AttributeSet attrs) {    super();  }  @Override  public boolean onStartNestedScroll(final CoordinatorLayout coordinatorLayout, final FloatingActionButton child,                    final View directTargetChild, final View target, final int nestedScrollAxes) {    // Ensure we react to vertical scrolling    return nestedScrollAxes == ViewCompat.SCROLL_AXIS_VERTICAL        || super.onStartNestedScroll(coordinatorLayout, child, directTargetChild, target, nestedScrollAxes);  }  @Override  public void onNestedScroll(final CoordinatorLayout coordinatorLayout, final FloatingActionButton child,                final View target, final int dxConsumed, final int dyConsumed,                final int dxUnconsumed, final int dyUnconsumed) {    super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed);    if (dyConsumed > 0 && !this.mIsAnimatingOut && child.getVisibility() == View.VISIBLE) {      // User scrolled down and the FAB is currently visible -> hide the FAB      animateOut(child);    } else if (dyConsumed < 0 && child.getVisibility() != View.VISIBLE) {      // User scrolled up and the FAB is currently not visible -> show the FAB      animateIn(child);    }  }  // Same animation that FloatingActionButton.Behavior uses to hide the FAB when the AppBarLayout exits  private void animateOut(final FloatingActionButton button) {    if (Build.VERSION.SDK_INT >= 14) {      ViewCompat.animate(button).translationY(button.getHeight() + getMarginBottom(button)).setInterpolator(INTERPOLATOR).withLayer()          .setListener(new ViewPropertyAnimatorListener() {            public void onAnimationStart(View view) {              FabBehavior.this.mIsAnimatingOut = true;            }            public void onAnimationCancel(View view) {              FabBehavior.this.mIsAnimatingOut = false;            }            public void onAnimationEnd(View view) {              FabBehavior.this.mIsAnimatingOut = false;              view.setVisibility(View.GONE);            }          }).start();    } else {    }  }  // Same animation that FloatingActionButton.Behavior uses to show the FAB when the AppBarLayout enters  private void animateIn(FloatingActionButton button) {    button.setVisibility(View.VISIBLE);    if (Build.VERSION.SDK_INT >= 14) {      ViewCompat.animate(button).translationY(0)          .setInterpolator(INTERPOLATOR).withLayer().setListener(null)          .start();    } else {    }  }  private int getMarginBottom(View v) {    int marginBottom = 0;    final ViewGroup.LayoutParams layoutParams = v.getLayoutParams();    if (layoutParams instanceof ViewGroup.MarginLayoutParams) {      marginBottom = ((ViewGroup.MarginLayoutParams) layoutParams).bottomMargin;    }    return marginBottom;  }}

這是自定義的一個Behavior類,主要在onNestedScroll中自定義了出現和消失的動畫。使用的時候,在xml文件中給FAB加一個包含完整behavior類名的layout_behavior屬性

app:layout_behavior="com.normalframe.widgets.view.FabBehavior"

這樣FAB就會隨著列表上滑消失,下滑出現。這個功能主要是要處理FAB的位置會使列表最后一項被擋住的問題,當上滑時,FAB隱藏,這樣當到達列表底部最后一項時,由于剛剛的動作是上滑動作,所以FAB處于隱藏狀態,不會遮擋到列表。

在寫這個功能時,發現了一個問題:

上滑時FAB能夠正常隱藏,但是下拉列表時,FAB就不出現了。

而一樣的代碼如果放到其它項目中,有些又可以正常實現功能。Debug的時候發現,上拉時會調用onNestedScroll,于是其中自定義的隱藏方法可以被調用,但下滑時,不調用onNestedScroll。

以上所述是小編給大家介紹的Android自定義FloatingActionButton滑動行為只隱藏不出現的問題小結,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 曲靖市| 偏关县| 湖州市| 南皮县| 平顺县| 右玉县| 申扎县| 花垣县| 丰县| 江孜县| 胶南市| 汕尾市| 麻栗坡县| 苗栗县| 镇坪县| 聂拉木县| 康乐县| 徐闻县| 桐乡市| 塔城市| 资兴市| 秦皇岛市| 洛隆县| 越西县| 迁西县| 运城市| 河间市| 通山县| 凤山县| 句容市| 宁都县| 根河市| 雷波县| 苏尼特右旗| 黄山市| 简阳市| 皮山县| 清徐县| 车致| 汤原县| 吕梁市|