FloatingActionButton hide nella list scroll

Im utilizzando il FloatingActionButton dal pacchetto android.support.design.widget :

 <android.support.design.widget.FloatingActionButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentEnd="true" android:layout_marginBottom="20dp" android:layout_marginEnd="16dp" android:clickable="true" android:backgroundTint="@color/primaryColor" android:src="@drawable/ic_search_white_24dp" app:borderWidth="0dp" app:elevation="6dp" app:backgroundTint="@color/primaryColorDark" app:rippleColor="@color/accentColor" /> 

È ansible configurare quel button per hide con un'animation quando la listview sta scorrendo verso il basso e visualizzarla nuovamente quando la listview scorre fino alla parte superiore?

  • versione chiave errata quando si fa chiamata https
  • Xamarin MvvmCross Android impedisce il button di return alla visualizzazione precedente
  • Come utilizzare l'ultima versione di gradel in Android Studio
  • Come distriggersre i dati mobili su Android
  • Come aggiungere un elemento secondario in Android ListView?
  • Abilita l'exception C ++
  • 6 Solutions collect form web for “FloatingActionButton hide nella list scroll”

    Vedi questo . Qui spiega come fare quello che stai cercando di realizzare. Devi utilizzarlo in questo modo in un CoordinatorLayout e in ListView :

     <android.support.design.widget.CoordinatorLayout android:id="@+id/main_content" 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"> <ListView android:id="@+id/lvToDoList" android:layout_width="match_parent" android:layout_height="match_parent"></ListView> <android.support.design.widget.FloatingActionButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|right" android:layout_margin="16dp" android:src="@drawable/ic_done" app:layout_anchor="@id/lvToDoList" app:layout_anchorGravity="bottom|right|end" /> </android.support.design.widget.CoordinatorLayout> 

    Quelli che vogliono farlo con il riciclaggio possono farlo:

     recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener(){ @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy){ if (dy > 0 ||dy<0 && fab.isShown()) fab.hide(); } @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { if (newState == RecyclerView.SCROLL_STATE_IDLE){ fab.show(); } super.onScrollStateChanged(recyclerView, newState); } }); 

    usando questa class puoi facilmente animare FAB, qui ho implementato il metodoStopNestedScroll () per mostrare la tua Fab each volta che scorrimento arresta. Ho impostato 1000 milsecondi come ritardo utilizzando Handler ();

      public class ScrollingFABBehavior extends CoordinatorLayout.Behavior<FloatingActionButton> { private static final String TAG = "ScrollingFABBehavior"; Handler mHandler; public ScrollingFABBehavior(Context context, AttributeSet attrs) { super(); } @Override public void onStopNestedScroll(CoordinatorLayout coordinatorLayout, final FloatingActionButton child, View target) { super.onStopNestedScroll(coordinatorLayout, child, target); if (mHandler == null) mHandler = new Handler(); mHandler.postDelayed(new Runnable() { @Override public void run() { child.animate().translationY(0).setInterpolator(new LinearInterpolator()).start(); Log.d("FabAnim","startHandler()"); } },1000); } @Override public void onNestedScroll(CoordinatorLayout coordinatorLayout, FloatingActionButton child, View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed) { super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed); //child -> Floating Action Button if (dyConsumed > 0) { Log.d("Scrolling","Up"); CoordinatorLayout.LayoutParams layoutParams = (CoordinatorLayout.LayoutParams) child.getLayoutParams(); int fab_bottomMargin = layoutParams.bottomMargin; child.animate().translationY(child.getHeight() + fab_bottomMargin).setInterpolator(new LinearInterpolator()).start(); } else if (dyConsumed < 0) { Log.d("Scrolling","down"); child.animate().translationY(0).setInterpolator(new LinearInterpolator()).start(); } } @Override public boolean onStartNestedScroll(CoordinatorLayout coordinatorLayout, FloatingActionButton child, View directTargetChild, View target, int nestedScrollAxes) { if(mHandler!=null) { mHandler.removeMessages(0); Log.d("Scrolling","stopHandler()"); } return nestedScrollAxes == ViewCompat.SCROLL_AXIS_VERTICAL; } } 

    your_layout.xml

     <android.support.design.widget.FloatingActionButton android:id="@+id/imageViewYes" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|end|right" android:layout_margin="@dimen/fab_margin" android:src="@drawable/ic_yes" app:backgroundTint="@color/white" android:scaleType="center" app:elevation="6dp" app:fabSize="normal" app:layout_behavior="com.your.package.ScrollingFABBehavior" app:pressedTranslationZ="12dp" app:rippleColor="@color/gray" /> 

    hey c'è o richiedono di prendere il recyclerview per hide automaticamente il button di azione galleggiante su scorrimento per questo scopo possiamo usare listview di default con il button di azione galleggiante in modo normale fare solo le modifiche su listview.onscroll ascoltatore quindi possiamo get sentire come riciclare

      listview.setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { int lastItem = firstVisibleItem + visibleItemCount; if (lastItem == totalItemCount) { fab.setVisibility(View.INVISIBLE); }else { fab.setVisibility(View.VISIBLE); } } }); 

    Secondo me il modo migliore per attuare questo potrebbe essere quello di seguito.

     public class ScrollingFABBehavior extends FloatingActionButton.Behavior { private static final String TAG = "ScrollingFABBehavior"; public ScrollingFABBehavior(Context context, AttributeSet attrs) { super(); // Log.e(TAG, "ScrollAwareFABBehavior"); } public boolean onStartNestedScroll(CoordinatorLayout parent, FloatingActionButton child, View directTargetChild, View target, int nestedScrollAxes) { return true; } @Override public boolean layoutDependsOn(CoordinatorLayout parent, FloatingActionButton child, View dependency) { if (dependency instanceof RecyclerView) return true; return false; } @Override public void onNestedScroll(CoordinatorLayout coordinatorLayout, FloatingActionButton child, View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed) { // TODO Auto-generated method stub super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed); //Log.e(TAG, "onNestedScroll called"); if (dyConsumed > 0 && child.getVisibility() == View.VISIBLE) { // Log.e(TAG, "child.hide()"); child.hide(); } else if (dyConsumed < 0 && child.getVisibility() != View.VISIBLE) { // Log.e(TAG, "child.show()"); child.show(); } }} 

    Per una risposta dettagliata verificare questo. Nascondi FloatingActionButton sul rotolo di RecyclerView

    Un piccolo miglioramento del codice di Irfan Raza :

     recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener(){ @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy){ if (dy<-5 && !fab.isShown()) fab.show(); else if(dy>5 && fab.isShown()) fab.hide(); } @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); } }); 

    Il button di azione galleggiante si nasconde quando scorra verso il basso e viene visualizzato quando scorri in alto.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.