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;
        }
    }
  }