Cómo habilitar / deshabilitar el comportamiento de FloatingActionButton

Estoy trabajando en la aplicación en algún fragmento quiero ocultar FloatingActionButtton. Cuando establezco android: visibility = "ido" . La animación de comportamiento me muestra FloatingActionButtton cuando deslizo hacia arriba y hacia abajo. Es que hay alguna manera que puedo desactivar / habilitar FloatingActionButtton comportamiento.

Gracias de antemano.

Aquí está mi código

QuickReturnFooterBehavior.java

package com.app.common; import android.animation.Animator; import android.content.Context; import android.support.design.widget.CoordinatorLayout; import android.support.v4.view.ViewCompat; import android.support.v4.view.animation.FastOutSlowInInterpolator; import android.util.AttributeSet; import android.view.View; import android.view.ViewPropertyAnimator; @SuppressWarnings("unused") public class QuickReturnFooterBehavior extends CoordinatorLayout.Behavior<View> { private static final FastOutSlowInInterpolator INTERPOLATOR = new FastOutSlowInInterpolator(); private int mDySinceDirectionChange; private boolean mIsShowing; private boolean mIsHiding; public QuickReturnFooterBehavior() { } public QuickReturnFooterBehavior(Context context, AttributeSet attrs) { super(context, attrs); } @Override public boolean onStartNestedScroll(CoordinatorLayout coordinatorLayout, View child, View directTargetChild, View target, int nestedScrollAxes) { return (nestedScrollAxes & ViewCompat.SCROLL_AXIS_VERTICAL) != 0; } @Override public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, View child, View target, int dx, int dy, int[] consumed) { if (dy > 0 && mDySinceDirectionChange < 0 || dy < 0 && mDySinceDirectionChange > 0) { // We detected a direction change- cancel existing animations and reset our cumulative delta Y child.animate().cancel(); mDySinceDirectionChange = 0; } mDySinceDirectionChange += dy; if (mDySinceDirectionChange > child.getHeight() && child.getVisibility() == View.VISIBLE && !mIsHiding) { hide(child); } else if (mDySinceDirectionChange < 0 && child.getVisibility() == View.GONE && !mIsShowing) { show(child); } } /** * Hide the quick return view. * * Animates hiding the view, with the view sliding down and out of the screen. * After the view has disappeared, its visibility will change to GONE. * * @param view The quick return view */ private void hide(final View view) { mIsHiding = true; ViewPropertyAnimator animator = view.animate() .translationY(view.getHeight()) .setInterpolator(INTERPOLATOR) .setDuration(200); animator.setListener(new Animator.AnimatorListener() { @Override public void onAnimationStart(Animator animator) {} @Override public void onAnimationEnd(Animator animator) { // Prevent drawing the View after it is gone mIsHiding = false; view.setVisibility(View.GONE); } @Override public void onAnimationCancel(Animator animator) { // Canceling a hide should show the view mIsHiding = false; if (!mIsShowing) { show(view); } } @Override public void onAnimationRepeat(Animator animator) {} }); animator.start(); } /** * Show the quick return view. * * Animates showing the view, with the view sliding up from the bottom of the screen. * After the view has reappeared, its visibility will change to VISIBLE. * * @param view The quick return view */ private void show(final View view) { mIsShowing = true; ViewPropertyAnimator animator = view.animate() .translationY(0) .setInterpolator(INTERPOLATOR) .setDuration(200); animator.setListener(new Animator.AnimatorListener() { @Override public void onAnimationStart(Animator animator) { view.setVisibility(View.VISIBLE); } @Override public void onAnimationEnd(Animator animator) { mIsShowing = false; } @Override public void onAnimationCancel(Animator animator) { // Canceling a show should hide the view mIsShowing = false; if (!mIsHiding) { hide(view); } } @Override public void onAnimationRepeat(Animator animator) {} }); animator.start(); } } 

Y XML

  <android.support.design.widget.FloatingActionButton app:layout_behavior="com.app.common.QuickReturnFooterBehavior" android:id="@+id/fab_2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="16dp" android:src="@drawable/ic_action_quick_response_code" app:backgroundTint="@color/text_gray" app:descriptionText="@string/add_friend" app:elevation="3dp" app:borderWidth="0dp" /> 

Finalmente lo encuentro solución y quiero compartir con usted.

Puede activar / desactivar el comportamiento de FloatingActionButton

Desactivar comportamiento

  FloatingActionButton fab2 = (FloatingActionButton)findViewById(R.id.fab2); CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) fab2.getLayoutParams(); params.setBehavior(null); fab2.requestLayout(); fab2.setVisibility(View.GONE); 

Activar comportamiento

  CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) fab2.getLayoutParams(); params.setBehavior(new QuickReturnFooterBehavior()); fab2.requestLayout(); fab2.setVisibility(View.VISIBLE); 

Editado: Más clase reutilizable

 public class CoordinateBehaviourUtils { public static void enableDisableViewBehaviour(View view,CoordinatorLayout.Behavior<View> behavior,boolean enable){ CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) view.getLayoutParams(); params.setBehavior(behavior); view.requestLayout(); view.setVisibility((enable ? View.VISIBLE: View.GONE)); } } 

Cómo habilitar el uso de clase común

 FloatingActionButton fab2 = (FloatingActionButton)findViewById(R.id.fab2); CoordinateBehaviourUtils.enableDisableViewBehaviour(fab2,new QuickReturnFooterBehavior(),true); 

Cómo deshabilitar el uso de clase común

 FloatingActionButton fab2 = (FloatingActionButton)findViewById(R.id.fab2); CoordinateBehaviourUtils.enableDisableViewBehaviour(fab2,null,false); 

Espero que solucione tu problema 🙂

  • Biblioteca FloatingActionButton de terceros en CoordinatorLayout
  • Creación de un botón de acción flotante con menús de subacción animados
  • FloatingActionButton Shadow Cut de Square
  • Dos botones de acción flotante al lado del otro
  • Configuración de src y fondo para FloatingActionButton
  • El botón de acción flotante siempre se muestra en la parte superior
  • Ocultar un botón de acción flotante de otro diseño
  • Android Cómo implementar la Hoja inferior de Documentos de diseño de materiales
  • Cómo agregar un TextView encima de un FloatingActionButton en Android
  • ¿Cuál es la distancia entre 2 o más botones de acción flotante?
  • Establecer el color del icono FAB
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.