package com.mcxtzhang.coordinatordemo.uc;
import android.content.Context;
import android.support.design.widget.CoordinatorLayout;
import android.support.v4.view.ViewCompat;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import com.mcxtzhang.coordinatordemo.util.ViewOffsetBehavior;
/**
* 折叠的Behavior 它不依赖任何View 只做嵌套滑动
*/
public class CstCollapsedBehavior extends ViewOffsetBehavior<View> {
private static final String TAG = "zxt/CstCollapsed";
//开始被隐藏View的高度
protected int mTopHeight;
public CstCollapsedBehavior() {
}
public CstCollapsedBehavior(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onStartNestedScroll(CoordinatorLayout coordinatorLayout, View child, View directTargetChild, View target, int nestedScrollAxes) {
if (nestedScrollAxes == ViewCompat.SCROLL_AXIS_VERTICAL) {
return true;
}
return super.onStartNestedScroll(coordinatorLayout, child, directTargetChild, target, nestedScrollAxes);
}
@Override
public void onNestedScrollAccepted(CoordinatorLayout coordinatorLayout, View child, View directTargetChild, View target, int nestedScrollAxes) {
super.onNestedScrollAccepted(coordinatorLayout, child, directTargetChild, target, nestedScrollAxes);
mTopHeight = coordinatorLayout.getChildAt(1).getHeight();
}
@Override
public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, View child, View target, int dx, int dy, int[] consumed) {
Log.d(TAG, "onNestedPreScroll(), child = [" + child + "], target = [" + target + "], dx = [" + dx + "], dy = [" + dy + "], consumed = [" + consumed + "]");
/* if (dy > 0) {
target.setTop(target.getTop() - dy);
consumed[1] = dy;
}*/
if (dy > 0) {//显示底端 折叠exit
if (child.getBottom() - dy >= mTopHeight) {
} else {
dy = child.getBottom() - mTopHeight;
}
if (dy != 0) {
setTopAndBottomOffset(getTopAndBottomOffset() - dy);
consumed[1] = dy;
/* int temp = (int) (-getTopAndBottomOffset() * 1.0f / (child.getHeight() - mTopHeight) * mMoveDistance);
Log.e(TAG, "onNestedPreScroll: temp:" + temp);
mTopViewHelper.setTopAndBottomOffset(temp);*/
}
} else {
//展开 enter
/* if (child.getTop() - dy <= -mTopHeight) {
} else {
dy = child.getTop() + mTopHeight;
}*/
}
/*setTopAndBottomOffset(getTopAndBottomOffset() - dy);
consumed[1] = dy;*/
super.onNestedPreScroll(coordinatorLayout, child, target, dx, dy, consumed);
}
@Override
public void onNestedScroll(CoordinatorLayout coordinatorLayout, View child, View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed) {
super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed);
if (dyConsumed == 0 && dyUnconsumed < 0) {
//展开 enter
if (child.getTop() - dyUnconsumed <= /*-mTopHeight*/ 0) {
} else {
dyUnconsumed = child.getTop() + /*mTopHeight;*/ 0;
}
if (dyUnconsumed != 0) {
setTopAndBottomOffset(getTopAndBottomOffset() - dyUnconsumed);
}
}
}
@Override
public void onStopNestedScroll(CoordinatorLayout coordinatorLayout, View child, View target) {
super.onStopNestedScroll(coordinatorLayout, child, target);
}
}