package com.mcxtzhang.coordinatordemo.uc; import android.content.Context; import android.support.design.widget.CoordinatorLayout; import android.util.AttributeSet; import android.util.Log; import android.view.View; import com.mcxtzhang.coordinatordemo.util.ViewOffsetBehavior; /** * 介绍: * 作者:zhangxutong * 邮箱:mcxtzhang@163.com * 主页:http://blog.csdn.net/zxt0601 * 时间: 2016/12/22. */ public class CstNestContentBehavior extends ViewOffsetBehavior<View> { private static final String TAG = "zxt/内容Behavior"; //它完全出现,SecondView Topoffset的距离 protected int mFirstViewTopOffsetMax; protected int mMoveDistance; public CstNestContentBehavior() { super(); } public CstNestContentBehavior(Context context, AttributeSet attrs) { super(context, attrs); } @Override public boolean layoutDependsOn(CoordinatorLayout parent, View child, View dependency) { Log.d(TAG, "layoutDependsOn() called with: parent = [" + parent + "], child = [" + child + "], dependency = [" + dependency + "]"); boolean flag = dependency == parent.getChildAt(0); if (flag) { mMoveDistance = (dependency.getHeight() - parent.getChildAt(1).getHeight() - parent.getChildAt(2).getHeight()); mFirstViewTopOffsetMax = -(dependency.getHeight() - parent.getChildAt(1).getHeight()); } return flag; } @Override public boolean onDependentViewChanged(CoordinatorLayout parent, View child, View dependency) { Log.d(TAG, "onDependentViewChanged() called with: parent = [" + parent + "], child = [" + child + "], dependency = [" + dependency + "]"); float fraction = dependency.getTop() * 1.0f / mFirstViewTopOffsetMax; setTopAndBottomOffset((int) (mMoveDistance * (1 - fraction)) +parent.getChildAt(1).getHeight() +parent.getChildAt(2).getHeight() ); return true; } }