2017-06-19 57 views
0

我在我的项目Android中使用了浮动动作按钮,当列表滚动到底部时我将其隐藏,并且在滚动到顶部时显示它,通过执行我的Recyclerview上的一个OnScrollListener。现在当列表不能滚动时隐藏浮动动作按钮

@Override 
    public void onScrolled(RecyclerView recyclerView, int dx, int dy) { 
     boolean isSignificantDelta = Math.abs(dy) > mScrollThreshold; 
     if (isSignificantDelta) { 
      if (dy > 0) { 
       onScrollUp(); 
      } else { 
       onScrollDown(); 
      } 
     } 
    } 

,我想隐藏这个工厂时,我的列表不滚动,对于我的最后一个元素是完全可见。

当我的列表为空或包含少量项目并且由于其大小而不可滚动时,不会调用滚动的方法。

您是否有建议调用此方法,因为这似乎是我的解决方案来执行我想要做的事情?

+1

也许你可以使用['CoordinatorLayout'的'Behavior's(https://github.com/newfivefour/BlogPosts/blob/master/android-coordinatorlayout-scrolling-hide-fab- behavior.md)? – azizbekian

+0

@azizbekian使用CoordinatorLayout时,如何隐藏我的FAB,当他重叠列表中的最后一项时,它不可滚动(列表中没有足够的元素)。 –

回答

0

检查下面的代码

public abstract class HideShowScrollListener extends RecyclerView.OnScrollListener { 

private static final int HIDE_THRESHOLD = 20; 
private int scrolledDistance = 0; 
private boolean controlsVisible = true; 

@Override 
public void onScrolled(RecyclerView recyclerView, int dx, int dy) { 
    super.onScrolled(recyclerView, dx, dy); 

    if (scrolledDistance > HIDE_THRESHOLD && controlsVisible) { 
     onHide(); 
     controlsVisible = false; 
     scrolledDistance = 0; 
    } else if (scrolledDistance < -HIDE_THRESHOLD && !controlsVisible) { 
     onShow(); 
     controlsVisible = true; 
     scrolledDistance = 0; 
    } 

    if ((controlsVisible && dy > 0) || (!controlsVisible && dy < 0)) { 
     scrolledDistance += dy; 
    } 
} 

public abstract void onHide(); 

public abstract void onShow(); 
} 
您的活动

定义下面的代码, 这里floatingAdd是浮动按钮。

recyclerView.addOnScrollListener(new HideShowScrollListener() { 
     @Override 
     public void onHide() { 
      floatingAdd.animate().setInterpolator(new AccelerateDecelerateInterpolator()).scaleX(0).scaleY(0); 
     } 

     @Override 
     public void onShow() { 
      floatingAdd.animate().setInterpolator(new AccelerateDecelerateInterpolator()).scaleX(1).scaleY(1); 
     } 
    }); 
+0

我已经在使用这个实现,但是当我的列表只包含少量项目时,不会调用onScrolled。 –

+0

当你在列表中有几个项目,然后它如何成为可滚动... – Akash

+0

请检查我的问题。我想隐藏FAB,但没有调用滚动,所以我不知道我能做些什么。 –