编辑:看看我自己的答案,以便于解决
IMPORTANT :提供Bounty以明确修改ViewPager以满足下面概述的方案 . 请不要提供HorizontalScrollView - 我需要覆盖完整的Fragment生命周期场景
我需要实现基于 Fragments
的视图的水平滚动,其中一个项目位于中心,右侧/左侧的项目部分或完全可见 . ViewPager
不适合该任务,因为它专注于每次显示一个项目 .
为了便于理解,下面是一个快速草图,其中第1项,第5项和第6项位于可视区域之外 . 并且想要使这个可查看的数字可配置,例如在纵向视图中,我将只显示2个(或可能只是一个)项目 .
我不打算在屏幕上说出3个项目,只要显示中心项目,其他项目就可以被裁剪 . 在小屏幕上可以有1个中心项目,并且当屏幕增大时,应显示多个(裁剪为OK)项目
我知道这看起来像一个画廊但是这些项目不是简单的图像,而是 Fragments
,每个片段都有一个可垂直滚动的列表
附:在@Commonsware找到了这个博客帖子list 3 different approaches . 根据我的需要,我喜欢#3
7 回答
这个答案非常容易,我马上就发布了 . 为了获得确切的效果,我需要做的就是覆盖
PagerAdapter#getPageWidth
方法 . 默认情况下,它返回1但如果将其设置为0.5,则将获得2页,0.33将为您提供3,等等 . 根据寻呼机项目之间的分隔符宽度,您可能需要略微降低该值 .请参阅以下代码段:
有一次我写了类似模板的东西 . 在我的例子中,我可以使用按钮上下和侧面滚动 . 您可以稍微修改它以满足您的要求 . 在我的例子中,我有4个像这样排列的视图:
1 2
3 4
看起来像这样 . 在图片上,我从视图1向右滚动到视图2:
代码由这个xml组成:
这个Java代码:
每个屏幕上的大数字都是黑色背景图像,上面画着这些数字 . (我没有在这里发布,因为你可能会修改代码) .
我们正在做的事情与您描述使用带有
Fragments
的Gallery
以及扩展BaseAdapter
的图库适配器非常相似 . 我建议你去画廊去实现你的目标(我们也使用ViewPager
作为我们不需要看其他片段的视图) .我可以想到两种可能实现这一点的方法 .
由ViewSwitcher . 这是一个很好的YouTube video,显示它如何与onGestureListener一起使用 . 但是,我不确定这是否适用于您的图片显示的多个视图 .
作为替代方案,您可以使用HorizontalScrollView . 但是,如果您在另一个内部有一个ScrollView,这通常会导致问题,但它可能值得一试!
让我知道它是怎么回事,祝你好运!
除了MrZander的第二个答案,看看这个https://stackoverflow.com/a/2655740/935075
Check out this blog post关于如何编写自定义水平滚动视图来实现类似的东西 . 该示例一次只能看到一个屏幕,但您应该可以根据需要轻松修改它 .
如果要扩展ViewPager,只需覆盖draw方法和setOffscreenPageLimit(int limit) . 但是,如果您的片段本身很复杂,我建议使用
FragmentPageAdapter
.您可以检查源代码 here ,或者如果要检查支持包中的代码,可以执行 here .