package party.danyang.nationalgeographic.widget; import android.content.Context; import android.support.design.widget.AppBarLayout; import android.support.design.widget.CollapsingToolbarLayout; import android.util.AttributeSet; import android.util.Log; import android.view.ViewParent; /** * Created by dream on 16-8-17. */ public class StateCollapsingToolbarLayout extends CollapsingToolbarLayout { private static final String TAG = "StateCollapsingToolbarLayout"; public CollapsingToolbarLayoutState state; public enum CollapsingToolbarLayoutState { EXPANDED, COLLAPSED, INTERNEDIATE } private OnStateChangedListener mOnStateChangedListener; public void setOnStateChangedListener(OnStateChangedListener onStateChangedListener) { if (!(getParent() instanceof AppBarLayout)) { Log.e(TAG, "onStateChangeListener need AppBarLayout as a parent view"); return; } this.mOnStateChangedListener = onStateChangedListener; } public StateCollapsingToolbarLayout(Context context) { super(context); } public StateCollapsingToolbarLayout(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public StateCollapsingToolbarLayout(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); ViewParent parent = getParent(); if (mOnStateChangedListener != null) { setStateChangedListener(); } } private void setStateChangedListener() { AppBarLayout appBarLayout = (AppBarLayout) getParent(); appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() { @Override public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) { if (verticalOffset == 0) { if (state != CollapsingToolbarLayoutState.EXPANDED) { //修改状态标记为展开 state = CollapsingToolbarLayoutState.EXPANDED; mOnStateChangedListener.onExpanded(); } } else if (Math.abs(verticalOffset) >= appBarLayout.getTotalScrollRange()) { if (state != CollapsingToolbarLayoutState.COLLAPSED) { //修改状态标记为折叠 state = CollapsingToolbarLayoutState.COLLAPSED; mOnStateChangedListener.onCollapsed(); } } else { if (state != CollapsingToolbarLayoutState.INTERNEDIATE) { state = CollapsingToolbarLayoutState.INTERNEDIATE; } mOnStateChangedListener.onInternediate(); } } }); } }