使用 OnPageChangeListener 同步两个 ViewPager

编程入门 行业动态 更新时间:2024-10-28 20:28:31
本文介绍了使用 OnPageChangeListener 同步两个 ViewPager的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我正在尝试同步两个 ViewPager,显然我之前有很多人,我已经做到了:

I'm trying to synchronize two ViewPagers, as apparently have quite a lot of people before me, and I've got as far as this:

private ViewPager mNavPager; private ViewPager mMainPager; private final OnPageChangeListener mNavPagerListener = new OnPageChangeListener() { private boolean mNavDragging; private int mScrollPosition; @Override public void onPageSelected(int position) { mScrollPosition = position; } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { if(mNavDragging) mMainPager.scrollTo(positionOffsetPixels, 0); } @Override public void onPageScrollStateChanged(int state) { switch(state) { case ViewPager.SCROLL_STATE_DRAGGING: case ViewPager.SCROLL_STATE_SETTLING: mNavDragging = true; break; case ViewPager.SCROLL_STATE_IDLE: mNavDragging = false; break; } } }; private OnPageChangeListener mMainPagerListener = new OnPageChangeListener() { private boolean mMainDragging; private int mScrollPosition; @Override public void onPageSelected(int position) { mScrollPosition = position; } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { if(mMainDragging) mNavPager.scrollTo(positionOffsetPixels, 0); } @Override public void onPageScrollStateChanged(int state) { switch(state) { case ViewPager.SCROLL_STATE_DRAGGING: case ViewPager.SCROLL_STATE_SETTLING: mMainDragging = true; break; case ViewPager.SCROLL_STATE_IDLE: mMainDragging = false; break; } } };

如果手动滚动其中一个,则另一个使用滚动状态属性从属于它.它可以很好地工作,直到物品到达最终位置;此时,从属寻呼机立即弹回先前选择的项目,就好像没有发生滚动一样.

If either one is scrolled manually, the other is slaved to it using the scroll state property. It works beautifully till the items reach their final position; at this point, the slaved pager flicks instantly back to the previously selected item, as though the scrolling hadn't taken place.

我曾尝试使用各种不同的逻辑约束调用 ViewPager#setCurrentItem(mScrolledPosition),但这也不起作用,尽管它偶尔会使情况变得更糟.我觉得好像必须有什么可以做的,但我不确定是什么.

I have tried calling ViewPager#setCurrentItem(mScrolledPosition) with a variety of different logic constraints but that doesn't work either, though it does occasionally make it worse. I feel as though there must be something that can be done with that but I'm not sure what.

我怎样才能让从属寻呼机保持在正确的位置?

How can I get the slaved pager to remain in the correct position?

推荐答案

我使用 OnPageChangeListener 以更简单(更简洁)的方式解决了这个问题:

I solved this problem in a much easier (and cleaner) way using the OnPageChangeListener:

mViewPager1.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { private int mScrollState = ViewPager.SCROLL_STATE_IDLE; @Override public void onPageScrolled(final int position, final float positionOffset, final int positionOffsetPixels) { if (mScrollState == ViewPager.SCROLL_STATE_IDLE) { return; } mViewPager2.scrollTo(mViewPager1.getScrollX(), mViewPager2.getScrollY()); } @Override public void onPageSelected(final int position) { } @Override public void onPageScrollStateChanged(final int state) { mScrollState = state; if (state == ViewPager.SCROLL_STATE_IDLE) { mViewPager2.setCurrentItem(mViewPager1.getCurrentItem(), false); } } }); mViewPager2.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { private int mScrollState = ViewPager.SCROLL_STATE_IDLE; @Override public void onPageScrolled(final int position, final float positionOffset, final int positionOffsetPixels) { if (mScrollState == ViewPager.SCROLL_STATE_IDLE) { return; } mViewPager1.scrollTo(mViewPager2.getScrollX(), mViewPager1.getScrollY()); } @Override public void onPageSelected(final int position) { } @Override public void onPageScrollStateChanged(final int state) { mScrollState = state; if (state == ViewPager.SCROLL_STATE_IDLE) { mViewPager1.setCurrentItem(mViewPager2.getCurrentItem(), false); } } });

更多推荐

使用 OnPageChangeListener 同步两个 ViewPager

本文发布于:2023-10-26 22:18:38,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1531507.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:两个   OnPageChangeListener   ViewPager

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!