package org.opensilk.common.ui.behavior; import android.content.Context; import android.os.Build; import android.support.design.widget.CoordinatorLayout; import android.support.v4.view.ViewCompat; import android.support.v4.view.ViewPropertyAnimatorListener; import android.support.v4.view.animation.FastOutSlowInInterpolator; import android.util.AttributeSet; import android.view.View; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.view.animation.Interpolator; import android.widget.LinearLayout; /** * Created by drew on 9/3/15. */ public class FooterBehavior extends CoordinatorLayout.Behavior<View> { private static final Interpolator INTERPOLATOR = new FastOutSlowInInterpolator(); private boolean mIsAnimatingOut = false; public FooterBehavior(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 onNestedScroll(CoordinatorLayout coordinatorLayout, View child, View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed) { if (dyConsumed > 0 && !this.mIsAnimatingOut && child.getVisibility() == View.VISIBLE) { animateOut(child); } else if (dyConsumed < 0 && child.getVisibility() != View.VISIBLE) { animateIn(child); } } private void animateOut(final View view) { ViewCompat.animate(view) .translationY(view.getHeight()) .setInterpolator(INTERPOLATOR) .withLayer() .setListener(new ViewPropertyAnimatorListener() { public void onAnimationStart(View view) { mIsAnimatingOut = true; } public void onAnimationCancel(View view) { mIsAnimatingOut = false; } public void onAnimationEnd(View view) { mIsAnimatingOut = false; view.setVisibility(View.GONE); } }) .start(); } private void animateIn(final View view) { ViewCompat.animate(view) .translationY(0) .setInterpolator(INTERPOLATOR) .withLayer() .setListener(new ViewPropertyAnimatorListener() { @Override public void onAnimationStart(View view) { view.setVisibility(View.VISIBLE); } @Override public void onAnimationEnd(View view) { } @Override public void onAnimationCancel(View view) { } }) .start(); } }