我和你有同样的需要,我发现这个项目完全实现了你的需要,加上一些更吸引眼球的技巧。
https://github.com/kmshack/Android-ParallaxHeaderViewPager
神奇的是将片段列表中发生的滚动绑定到活动中定义的标题。在选项卡的选择和列表中的滚动位置之间也存在基本绑定,以便在滑动时调整列表。
此代码基于该 github 存储库,但更简单(因此不太健壮),阅读它只是为了了解发生了什么,然后阅读存储库中的源代码。
public class MyFragment extends Fragment implements OnScrollListener {
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
((MyParentActivity) getActivity()).onScrollFragment(view, mTabPosition);
}
public void adjustScroll(int scrollHeight) {
if (scrollHeight == 0 && fragmentListView.getFirstVisiblePosition() >= 1) {
return;
}
officesListView.setSelectionFromTop(1, scrollHeight);
}
}
那么在activity中你只需要这两个具体的方法
public class MyParentActivity implements ViewPager.OnPageChangeListener{
@Override
public void onPageSelected(int position)
myFragmentPagerAdapter.getFragmentAt(position)
.adjustScroll((int) (mHeader.getHeight() + ViewHelper.getTranslationY(mHeader)));
}
public void onScrollFragment(AbsListView view, int tabPosition) {
if (mViewPager.getCurrentItem() == tabPosition) {
int scrollY = getScrollY(view);
ViewHelper.setTranslationY(mHeader, Math.max(-scrollY, mMinHeaderTranslation));
}
}
}
感谢 NineOldAndroids 的 ViewHelper,这段代码可以达到 API 8 的要求