public void onScroll(AbsListView abslistview, int i, int j, int k) { if (mPinnedHeaderAdapter != null) { PinnedHeaderAdapter.PinnedHeaderStatus pinnedheaderstatus = mPinnedHeaderAdapter.getPinnedHeaderStatus(mNavBottom); if (pinnedheaderstatus != null) { mPinnedHeaderOffset = pinnedheaderstatus.pinnedHeaderOffset; mPinnedHeaderIsVisible = pinnedheaderstatus.pinnedHeaderIsVisible; if (pinnedheaderstatus.shouldRequestNewView) { mPinnedHeaderHeight = mPinnedHeaderAdapter.getPinnedHeaderHeight(); mPinnedHeaderView = mPinnedHeaderAdapter.getPinnedHeaderView(mPinnedHeaderView); if (mPinnedHeaderView != null) { ensureHeaderHasLayoutParams(mPinnedHeaderView); measureHeader(mPinnedHeaderView); mPinnedHeaderAdapter.layoutPinnedHeader( mPinnedHeaderView, 0, mPinnedHeaderOffset + mNavBottom, getWidth(), mNavBottom + mPinnedHeaderOffset + mPinnedHeaderHeight); } } } } if (mOnScrollListener != null) { mOnScrollListener.onScroll(abslistview, i, j, k); } }
public void configureHeaderView(int position) { if (mHeaderView == null) { return; } int state = mAdapter.getPinnedHeaderState(position); switch (state) { case PinnedHeaderAdapter.PINNED_HEADER_GONE: { mHeaderViewVisible = false; break; } case PinnedHeaderAdapter.PINNED_HEADER_VISIBLE: { mAdapter.configurePinnedHeader(mHeaderView, position, MAX_ALPHA); if (mHeaderView.getTop() != 0) { mHeaderView.layout(0, 0, mHeaderViewWidth, mHeaderViewHeight); } mHeaderViewVisible = true; break; } case PinnedHeaderAdapter.PINNED_HEADER_PUSHED_UP: { View firstView = getChildAt(0); if (firstView != null) { int bottom = firstView.getBottom(); int itemHeight = firstView.getHeight(); int headerHeight = mHeaderView.getHeight(); int y; int alpha; if (bottom < headerHeight) { y = (bottom - headerHeight); alpha = MAX_ALPHA * (headerHeight + y) / headerHeight; } else { y = 0; alpha = MAX_ALPHA; } mAdapter.configurePinnedHeader(mHeaderView, position, alpha); if (mHeaderView.getTop() != y) { mHeaderView.layout(0, y, mHeaderViewWidth, mHeaderViewHeight + y); } mHeaderViewVisible = true; } break; } } }