예제 #1
0
 /**
  * Manage animation for Android >= KITKAT
  *
  * @param child
  */
 private void ensureOrCancelAnimator(T child, bool withAnimation)
 {
     if (translationAnimator == null)
     {
         translationAnimator = ViewCompat.Animate(child);
         translationAnimator.SetDuration(withAnimation ? ANIM_DURATION : 0);
         translationAnimator.SetUpdateListener(
             new CustomViewPropertyAnimatorUpdateListener((view) =>
         {
             // Animate snackbar
             if (snackbarLayout != null && snackbarLayout.LayoutParameters is ViewGroup.MarginLayoutParams)
             {
                 targetOffset = view.MeasuredHeight - view.TranslationY;
                 ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams)snackbarLayout.LayoutParameters;
                 p.SetMargins(p.LeftMargin, p.TopMargin, p.RightMargin, (int)targetOffset);
                 snackbarLayout.RequestLayout();
             }
             // Animate Floating Action Button
             if (floatingActionButton != null && floatingActionButton.LayoutParameters is ViewGroup.MarginLayoutParams)
             {
                 ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams)floatingActionButton.LayoutParameters;
                 fabTargetOffset = fabDefaultBottomMargin - view.TranslationY + snackBarY;
                 p.SetMargins(p.LeftMargin, p.TopMargin, p.RightMargin, (int)fabTargetOffset);
                 floatingActionButton.RequestLayout();
             }
             // Pass navigation height to listener
             if (navigationPositionListener != null)
             {
                 navigationPositionListener.onPositionChange((int)(view.MeasuredHeight - view.TranslationY + snackBarY));
             }
         })
             );
         translationAnimator.SetInterpolator(INTERPOLATOR);
     }
     else
     {
         translationAnimator.SetDuration(withAnimation ? ANIM_DURATION : 0);
         translationAnimator.Cancel();
     }
 }