2017-06-19 3 views
0

Ich verwende einen Floating Action Button in meinem Projekt Android, und ich verstecke es, wenn die Liste nach unten scrollt und ich zeige, wenn es nach oben scrollt, durch die Implementierung von ein OnScrollListener auf meiner Recyclerview.Floating Action Button ausblenden, wenn die Liste nicht scrollbar ist

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

Nun würde Ich mag diese fab verstecken, wenn meine Liste nicht scrollbaren ist, denn das ist mein letztes Element ist vollständig sichtbar.

Scrolled-Methode wird nicht aufgerufen, wenn meine Liste leer ist oder wenige Elemente enthält und aufgrund seiner Größe nicht gescrollt werden kann.

Haben Sie einen Tipp, diese Methode zu nennen, weil dies meine Lösung zu tun scheint, was ich tun möchte?

+1

Vielleicht können Sie von [ '' CoordinatorLayout' des Behavior's] machen (https://github.com/newfivefour/BlogPosts/blob/master/android-coordinatorlayout-scrolling-hide-fab- behavior.md)? – azizbekian

+0

@azizbekian Mit einem CoordinatorLayout, Wie kann ich meinen FAB verstecken, wenn er den letzten Punkt meiner Liste überlappt, der nicht scrollbar ist (nicht genug Elemente in der Liste). –

Antwort

0

prüfen Code unten

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(); 
} 

in Ihrer Aktivität definieren Code unten, hier floatingAdd schwimmt Taste.

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

Ich verwende diese Implementierung bereits, aber onScrolled wird nicht aufgerufen, wenn meine Liste nur wenige Elemente enthält. –

+0

Wenn Sie einige Elemente in Liste haben, dann wie es scrollbar werden ... – Akash

+0

Bitte überprüfen Sie meine Frage. Ich möchte den FAB ausblenden, aber onScrolled wird nicht angerufen, also weiß ich nicht, wie ich das machen kann. –