【问题标题】:Move two VIewPagers simultaneously in one gesture在一个手势中同时移动两个 VIewPager
【发布时间】:2017-10-11 02:03:43
【问题描述】:

我需要在 2 个不同的 ViewPager 中以一个滑动手势对其中任何一个进行幻灯片转换。我该怎么办?

【问题讨论】:

  • 添加您现有的代码,以便我们为您提供帮助。
  • 如果你想让他们表现得像一个ViewPager,你为什么要用两个ViewPagers?
  • 实际上我需要在检测到向下滑动时显示一个视图并在向上滑动时显示另一个视图的屏幕。这两个视图都应该是水平滑动的。这就是为什么我制作了两个浏览器。但我无法同步这两个浏览器。我捕获了任何一个 ViewPager 的触摸事件,然后将该触摸事件转移到另一个,仍然抛出异常。

标签: android android-viewpager


【解决方案1】:

在 ViewPager 类的 OnPageChangeListener 中添加以下代码

public void onPageSelected(int position)
{
    secondViewPager.setCurrentItem(position, true);
}

【讨论】:

  • 这不是我想要的。你的技术只会导致一次转换。如果我需要在过渡过程中坚持下去怎么办。
【解决方案2】:

以下代码将同时滑动两个 ViewPager,无论大小是否相同

viewPagerBanner.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    private int scrollState = ViewPager.SCROLL_STATE_IDLE;
    // Indicates that the pager is in an idle, settled state. 
    // The current page is fully in view and no animation is in progress.

    @Override
    public void onPageScrolled(int position, float positionOffset, 
                               int positionOffsetPixels) {
        if (scrollState == ViewPager.SCROLL_STATE_IDLE) {
            return;
        }
        viewPagerTitle.scrollTo(viewPagerBanner.getScrollX()*
                                viewPagerTitle.getWidth()/
                                viewPagerBanner.getWidth(), 0);
        // We are not interested in Y axis position
    }

    @Override
    public void onPageSelected(int position) {}

    @Override
    public void onPageScrollStateChanged(int state) {
        scrollState = state;
        if (state == ViewPager.SCROLL_STATE_IDLE) {
            viewPagerTitle.setCurrentItem(viewPagerBanner.getCurrentItem(), false);
        }
    }
});

对另一个 ViewPager 使用相同的代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多