package com.malmstein.yahnac.comments;
import android.animation.Animator;
import android.content.Context;
import android.support.design.widget.CoordinatorLayout;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.view.ViewCompat;
import android.support.v4.view.animation.FastOutSlowInInterpolator;
import android.util.AttributeSet;
import android.view.View;
import com.malmstein.yahnac.data.updater.LoginSharedPreferences;
public class ScrollAwareFABBehavior extends FloatingActionButton.Behavior {
private LoginSharedPreferences loginSharedPreferences;
private boolean isAnimatingOut = false;
public ScrollAwareFABBehavior(Context context, AttributeSet attrs) {
super();
loginSharedPreferences = LoginSharedPreferences.newInstance();
}
@Override
public boolean onStartNestedScroll(final CoordinatorLayout coordinatorLayout,
final FloatingActionButton child,
final View directTargetChild,
final View target, final int nestedScrollAxes) {
return nestedScrollAxes == ViewCompat.SCROLL_AXIS_VERTICAL
|| super.onStartNestedScroll(coordinatorLayout,
child, directTargetChild, target, nestedScrollAxes);
}
@Override
public void onNestedScroll(final CoordinatorLayout coordinatorLayout, final FloatingActionButton child,
final View target, final int dxConsumed, final int dyConsumed,
final int dxUnconsumed, final int dyUnconsumed) {
super.onNestedScroll(coordinatorLayout, child, target,
dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed);
if (loginSharedPreferences.isLoggedIn()) {
if (dyConsumed > 0 && !this.isAnimatingOut && child.getVisibility() == View.VISIBLE) {
animateOut(child);
} else if (dyConsumed < 0 && child.getVisibility() != View.VISIBLE) {
animateIn(child);
}
}
}
private void animateOut(final FloatingActionButton button) {
button.setScaleX(1);
button.setScaleY(1);
button.animate()
.scaleX(0)
.scaleY(0)
.setInterpolator(new FastOutSlowInInterpolator())
.setListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
isAnimatingOut = true;
}
@Override
public void onAnimationEnd(Animator animation) {
isAnimatingOut = false;
button.setVisibility(View.GONE);
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
})
.start();
}
private void animateIn(FloatingActionButton button) {
button.setVisibility(View.VISIBLE);
button.setScaleX(0);
button.setScaleY(0);
button.animate()
.scaleX(1)
.scaleY(1)
.setInterpolator(new FastOutSlowInInterpolator())
.setListener(null)
.start();
}
}