Android自定义FloatingActionButton滑动行为只隐藏不出现的问题小结

 更新时间:2017年01月03日 11:11:39   投稿:mrr  
这篇文章主要介绍了Android自定义FloatingActionButton滑动行为只隐藏不出现的问题小结,需要的朋友可以参考下

先来段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滑动行为只隐藏不出现的问题小结,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • Flutter 快速实现聊天会话列表效果示例详解

    Flutter 快速实现聊天会话列表效果示例详解

    这篇文章主要为大家介绍了Flutter 快速实现聊天会话列表效果示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • ExpandableListView实现二级列表购物车

    ExpandableListView实现二级列表购物车

    这篇文章主要为大家详细介绍了ExpandableListView实现二级列表购物车,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • Android OkHttp 结合php 多图片上传实例

    Android OkHttp 结合php 多图片上传实例

    本篇文章主要介绍了Android OkHttp 结合php 多图片上传实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • 基于Android10渲染Surface的创建过程

    基于Android10渲染Surface的创建过程

    这篇文章主要介绍了基于Android10渲染Surface的创建过程,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • Android无需申请权限拨打电话的两种方式

    Android无需申请权限拨打电话的两种方式

    android 打电话有两种实现方式,第一种方法拨打电话跳转到拨号界面,第二种方法,拨打电话直接进行拨打,下面逐一给大家介绍这两种方式,需要的朋友参考下吧
    2016-12-12
  • Android自定义textview实现竖直滚动跑马灯效果

    Android自定义textview实现竖直滚动跑马灯效果

    这篇文章主要为大家详细介绍了Android自定义textview实现竖直滚动跑马灯效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • android studio实现简易的计算器

    android studio实现简易的计算器

    这篇文章主要为大家详细介绍了android studio实现简易的计算器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • Android ViewModel的作用深入讲解

    Android ViewModel的作用深入讲解

    这篇文章主要介绍了Android ViewModel的作用,ViewModel类旨在以注重生命周期的方式存储和管理界面相关数据,ViewModel类让数据可在发生屏幕旋转等配置更改后继续留存,需要详细了解可以参考下文
    2023-05-05
  • Android HandlerThread案例详解

    Android HandlerThread案例详解

    这篇文章主要介绍了Android HandlerThread案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • Android自定义控件之继承ViewGroup创建新容器

    Android自定义控件之继承ViewGroup创建新容器

    这篇文章主要介绍了Android自定义控件之继承ViewGroup创建新容器,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12

最新评论