package com.mcxtzhang.coordinatordemo.base; import android.content.Context; import android.support.design.widget.CoordinatorLayout; import android.support.v4.view.NestedScrollingChild; import android.util.AttributeSet; import android.view.View; /** * 介绍:基类的上滑下滑Behavior * 作者:zhangxutong * 邮箱:mcxtzhang@163.com * 主页:http://blog.csdn.net/zxt0601 * 时间: 16/12/21. */ public abstract class BaseUpDownBehavior<V extends View> extends CoordinatorLayout.Behavior<V> implements IUpDownCallback { public BaseUpDownBehavior() { } public BaseUpDownBehavior(Context context, AttributeSet attrs) { super(context, attrs); } //上一次的dy protected int preDy; @Override public boolean layoutDependsOn(CoordinatorLayout parent, V child, View dependency) { return dependency instanceof NestedScrollingChild; } /** * 嵌套滑动的时候,开始调用。 所有CoordinatorLayout的直接子View的Behavior都要触发这个函数 返回true代表嵌套滑动了。 只有返回true,才会接管 随后的嵌套滚动事件。 */ @Override public boolean onStartNestedScroll(CoordinatorLayout coordinatorLayout, View child, View directTargetChild, View target, int nestedScrollAxes) { return true; } @Override public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, V child, View target, int dx, int dy, int[] consumed) { //显示底部 隐藏 if (dy > 0) { if (preDy <= 0) { onScrollDown(coordinatorLayout, child, target, dx, dy, consumed); } } else {//显示头部 显示 if (preDy >= 0) { onScrollUp(coordinatorLayout, child, target, dx, dy, consumed); } } preDy = dy; } }