在兼容包中的ViewPager中如何滑动半页?

7
我正在使用兼容性包v4中的PageAdapterViewPager来滑动水平盒子列表。然而,问题在于第一页的第二个盒子是第二页的第一个盒子(从视觉和概念上看),如下图所示:enter image description here
现在我的做法是有效的,但在滑动到中间时会有相同的盒子出现两次(就像图片中显示的一样),这似乎有些奇怪。是否有一种方法可以只滑动“半个”页面? 编辑: 这些盒子实际上是一个ListView的抽象,我只需改变每个ListView的适配器来创建不同的页面。
2个回答

32
  1. 为每个页面创建一个片段
  2. 覆盖PageAdapter中的getPageWidth()以显示多个页面

代码:

@Override
public float getPageWidth(int position) {
    float nbPages = 2; // You could display partial pages using a float value
    return (1 / nbPages);
}

1
已更改,抱歉“延迟”了 :) - Tiago Almeida
完美!对我来说运行得很好。更详细地说,默认值getPageWidth为1f(即屏幕区域的100%)。因此,您可以设置1 /(您想要的每个屏幕页面数) - Amol Desai

2

是的,使用子宽度作为页面的一半。因此,滑动操作将调用下一个子元素,并滑动半个页面。祝好运!

编辑:再次检查了您的草图,请尝试将1、2、3等视为不同的子元素进行实现。(我预测大部分解决方案都会像GalleryView一样反应)


这些框只是简化了。实际上,每个框都是一个 ListView,每个“框”都有一个适配器。无论如何,我该如何将子宽度设置为页面的一半? - Tiago Almeida
@TiagoAlmeida。对我来说,ViewPager的子项始终填充ViewPager内部边界。因此,我通过一个小技巧解决了这个问题。这是源代码https://github.com/MonkeyPerformingCodingAction/ViewPagerMultipleChildTrick。 - Gökhan Barış Aker
已经看到你的代码了,谢谢。不过有点小bug :p (只能向一个方向滑动,有点棘手,也许我没有正确解释我的问题?)。我想要像现在这样滑动,但是我希望在滑动时出现两个页面的重叠。你的方法是有两个可以滑动的区域,感觉很奇怪。 - Tiago Almeida

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接