android - 如何创建轮播ViewPager?

标签 android android-viewpager

我只想在 Android 中做一个水平旋转木马。

如果我有 3 个屏幕 A B 和 C,那么我希望我的 ViewPager 允许我移动 A <-> B, B <-> C, C <-> A.

GTalk for Android 的对话可以这样切换。 三星的主屏幕和应用屏幕可以这样切换。

A B 和 C 是 fragment ,我正在使用扩展 FragmentPagerAdapter 的适配器。所有 fragment 都将包含一个 webview。

我看过here here在这里,但他们似乎都没有按照我的意愿去做。

谁能指导我正确的方向?

最佳答案

(交叉发布 my answer 来自相同的 StackOverflow 问题)

一种可能性是像这样设置屏幕:

C' A B C A'

C' 看起来就像 C,但是当你滚动到那里时,它会将你切换到真正的 C。 A' 看起来就像 A,但是当您滚动到那里时,它会将您切换到真正的 A。

我会通过实现 onPageScrollStateChanged 来做到这一点像这样:

@Override
public void onPageScrollStateChanged (int state) {
    if (state == ViewPager.SCROLL_STATE_IDLE) {
        int curr = viewPager.getCurrentItem();
        int lastReal = viewPager.getAdapter().getCount() - 2;
        if (curr == 0) {
            viewPager.setCurrentItem(lastReal, false);
        } else if (curr > lastReal) {
            viewPager.setCurrentItem(1, false);
        }
    }
}

请注意,这调用了 setCurrentItem 的替代形式并传递 false 使跳转立即发生而不是平滑滚动。

我认为这有两个主要缺点。首先,到达任一端后,用户必须让滚动稳定下来才能继续。其次,这意味着在您的第一页和最后一页中拥有所有 View 的第二个副本。根据您的屏幕的资源密集程度,可能会排除此技术作为可能的解决方案。

另请注意,由于 View 分页器在滚动稳定之前不会让点击进入底层控件,因此不为 A' 和 C' fragment 设置点击监听器等可能没问题。

编辑:现在我自己实现了这个,还有另一个相当大的缺点。当它从 A' 切换到 A 或从 C' 切换到 C 时,屏幕会闪烁片刻,至少在我目前的测试设备上是这样。

关于android - 如何创建轮播ViewPager?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9259627/

相关文章:

android - 在 viewpager 中更新 gridview

android - 在 Android Studio 中更改 Github 帐户

android - 在 WebView 中禁用捏缩放?

android - 如何停止在 android 中查看寻呼机滑动时播放视频?

fragment 内的 Android setShareIntent

android - viewpager2 RTL 不适用于 list supportRtl=false

java - 网站的客户端 android 应用程序

android - Facebook SDK 3.0 在android中上传视频

java - 如何在 Android 中舍入十进制数

android - 如何刷新 View 页面中的 fragment ?