美文网首页
FloatingActionButton滚动显示隐藏

FloatingActionButton滚动显示隐藏

作者: Y小圆脸 | 来源:发表于2017-06-29 15:03 被阅读40次
    1. 定义behavior

       import android.content.Context;
       import android.os.Build;
       import android.support.design.widget.CoordinatorLayout;
       import android.support.design.widget.FloatingActionButton;
       import android.support.v4.view.ViewCompat;
       import android.support.v4.view.ViewPropertyAnimatorListener;
       import android.support.v4.view.animation.FastOutSlowInInterpolator;
       import android.util.AttributeSet;
       import android.view.View;
       import android.view.ViewGroup;
       import android.view.animation.Interpolator;
       
       /**
        * Created by 070 on 2017/6/29.
        */
       
       public class ScrollAwareFABBehavior extends FloatingActionButton.Behavior {
       
           private static final Interpolator INTERPOLATOR = new FastOutSlowInInterpolator();
           private boolean mIsAnimatingOut = false;
       
           public ScrollAwareFABBehavior(Context context, AttributeSet attrs) {
               super();
           }
       
           @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(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) {
                   animateOut(child);
               } else if (dyConsumed < 0 && child.getVisibility() != View.VISIBLE) {
                   animateIn(child);
               }
           }
       
           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) {
                                   ScrollAwareFABBehavior.this.mIsAnimatingOut = true;
                               }
       
                               public void onAnimationCancel(View view) {
                                   ScrollAwareFABBehavior.this.mIsAnimatingOut = false;
                               }
       
                               public void onAnimationEnd(View view) {
                                   ScrollAwareFABBehavior.this.mIsAnimatingOut = false;
                                   view.setVisibility(View.INVISIBLE);
                               }
                           }).start();
               } else {
       
               }
           }
       
           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;
           }
       }
      
    2. 在布局文件中应用

       <?xml version="1.0" encoding="utf-8"?>
       <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
           xmlns:app="http://schemas.android.com/apk/res-auto"
           android:layout_width="match_parent"
           android:layout_height="match_parent">
       
           <android.support.design.widget.AppBarLayout
               android:layout_width="match_parent"
               android:layout_height="wrap_content"
               app:theme="@style/AppTheme.AppBarOverlay">
       
               <android.support.v7.widget.Toolbar
                   android:id="@+id/toolbar"
                   android:layout_width="match_parent"
                   android:layout_height="?attr/actionBarSize"
                   app:popupTheme="@style/AppTheme.PopupOverlay" />
           </android.support.design.widget.AppBarLayout>
       
           <android.support.v7.widget.RecyclerView
               android:id="@+id/recycle"
               android:layout_width="match_parent"
               android:layout_height="match_parent"
               app:layout_behavior="@string/appbar_scrolling_view_behavior" />
       
           <android.support.design.widget.FloatingActionButton
               android:id="@+id/fab"
               android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:layout_gravity="bottom|end"
               android:layout_margin="16dp"
               android:src="@mipmap/abc_ic_ab_back_top"
               app:layout_behavior="com.example.a070.demo.behavior.ScrollAwareFABBehavior"
               app:layout_scrollFlags="scroll|enterAlways|snap" />
       
       </android.support.design.widget.CoordinatorLayout>
      

    相关文章

      网友评论

          本文标题:FloatingActionButton滚动显示隐藏

          本文链接:https://www.haomeiwen.com/subject/enimcxtx.html