package com.mcxtzhang.coordinatordemo;
import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.support.design.widget.CoordinatorLayout;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.view.ViewCompat;
import android.support.v4.view.animation.FastOutLinearInInterpolator;
import android.util.Log;
import android.view.View;
/**
* 介绍:
* 作者:zhangxutong
* 邮箱:mcxtzhang@163.com
* CSDN:http://blog.csdn.net/zxt0601
* 时间: 16/10/23.
*/
public class CstFABBehavior extends CoordinatorLayout.Behavior<FloatingActionButton> {
private static final String TAG = "TAG1";
private int mTranslationY = 80 * 3;
@Override
public boolean onStartNestedScroll(CoordinatorLayout coordinatorLayout, FloatingActionButton child, View directTargetChild, View target, int nestedScrollAxes) {
Log.d(TAG, "onStartNestedScroll() called with: coordinatorLayout = [" + coordinatorLayout + "], child = [" + child + "], directTargetChild = [" + directTargetChild + "], target = [" + target + "], nestedScrollAxes = [" + nestedScrollAxes + "]");
//mTranslationY = coordinatorLayout.getHeight();
return (nestedScrollAxes & ViewCompat.SCROLL_AXIS_VERTICAL) != 0;//判断是否竖直滚动
}
private boolean hideAnimate = false;
private boolean showAnimate = false;
@Override
public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, final FloatingActionButton child, View target, int dx, int dy, int[] consumed) {
Log.d(TAG, ", child = [" + child.getTop() + "], target = [" + target + "], dx = [" + dx + "], dy = [" + dy + "], consumed = [" + consumed + "]");
//dy >0 显示尾,dy<0显示头
if (dy > 0 && child.getVisibility() == View.VISIBLE && !hideAnimate) {// hide
/* ValueAnimator valueAnimator = ValueAnimator.ofFloat(child.getTranslationY(), mTranslationY);
valueAnimator.setInterpolator(new FastOutSlowInInterpolator());
valueAnimator.setDuration(200).addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
float v = (float) valueAnimator.getAnimatedValue();
child.setTranslationY(v);
}
});
valueAnimator.start();*/
hideAnimate = true;
child.animate().cancel();
child.animate()
.scaleX(0f)
.scaleY(0f)
.alpha(0f)
.setDuration(200)
.setInterpolator(new FastOutLinearInInterpolator())
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
hideAnimate = false;
}
});
//.start();
} else if (dy < 0 && !hideAnimate /*&& child.getVisibility() == View.GONE*/) {//show
hideAnimate = true;
child.animate().cancel();
child.animate()
.scaleX(1)
.scaleY(1)
.alpha(1)
.setDuration(200)
.setInterpolator(new FastOutLinearInInterpolator())
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
hideAnimate = false;
}
});
//.start();
}
}
//滑动了才会调用,而onNestedPreScroll 一直在调用。有时候target没滑动,距离被别人消耗掉了
@Override
public void onNestedScroll(CoordinatorLayout coordinatorLayout, FloatingActionButton child, View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed) {
//Log.d(TAG, "onNestedScroll() called with: coordinatorLayout = [" + coordinatorLayout + "], child = [" + child + "], target = [" + target + "], dxConsumed = [" + dxConsumed + "], dyConsumed = [" + dyConsumed + "], dxUnconsumed = [" + dxUnconsumed + "], dyUnconsumed = [" + dyUnconsumed + "]");
}
}