package com.llf.common.widget;
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.ViewPropertyAnimatorListenerAdapter;
import android.support.v4.view.animation.FastOutLinearInInterpolator;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
/**
* Created by Administrator on 2017/3/29.
*/
public class TranslateBehavior extends FloatingActionButton.Behavior {
//我们还可以加一个加速器实现弹射效果
private FastOutLinearInInterpolator folistener=new FastOutLinearInInterpolator();
public TranslateBehavior(Context context, AttributeSet attr){
super();
}
@Override
public boolean onStartNestedScroll(CoordinatorLayout coordinatorLayout, FloatingActionButton child, View directTargetChild, View target, int nestedScrollAxes) {
//开始滑监听---当观察recyclerview开始发生滑动的时候回调
//nestedScrollAxes滑动关联的方向
return nestedScrollAxes== ViewGroup.SCROLL_AXIS_VERTICAL||super.onStartNestedScroll(coordinatorLayout, child, directTargetChild, target, nestedScrollAxes);
}
//正在滑出来
boolean isAnimatingOut=false;
@Override
public void onNestedScroll(CoordinatorLayout coordinatorLayout, FloatingActionButton child, View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed) {
//不断的调用
//判断滑动的方向 dyConsumed 某个方向的增量
if(dyConsumed>0&&!isAnimatingOut&&child.getVisibility()==View.VISIBLE){
//fab划出去
animateOut(child);
}else if(dyConsumed<0&&child.getVisibility()!=View.VISIBLE){
//fab划进来
animateIn(child);
}
super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed);
}
//滑进来
private void animateIn(FloatingActionButton child) {
child.setVisibility(View.VISIBLE);
//属性动画
ViewCompat.animate(child).translationX(0).setInterpolator(folistener).setListener(null).start();
}
//滑出去
private void animateOut(FloatingActionButton child) {
//属性动画
//设置监听判断状态
ViewCompat.animate(child).translationX(child.getHeight()).setInterpolator(folistener).setListener(new ViewPropertyAnimatorListenerAdapter(){
@Override
public void onAnimationStart(View view) {
isAnimatingOut=true;
super.onAnimationStart(view);
}
@Override
public void onAnimationCancel(View view) {
isAnimatingOut=false;
super.onAnimationCancel(view);
}
@Override
public void onAnimationEnd(View view) {
view.setVisibility(View.GONE);
isAnimatingOut=false;
super.onAnimationEnd(view);
}
}).start();
}
@Override
public void onStopNestedScroll(CoordinatorLayout coordinatorLayout, FloatingActionButton child, View target) {
super.onStopNestedScroll(coordinatorLayout, child, target);
}
}