5

我正在尝试使用 ViewPager 组件实现无限轮播。我基于Antonyt创建的一个,但使用少于 4 个视图时会出现问题。由于视图已经到位。必须是一种欺骗 Viewpager 在不同位置绘制相同视图/页面的方法。

4

4 回答 4

1

我遇到了同样的问题,自己找不到解决方案。但我想只使用 1-4 个视图是不可能的。问题是所有视图(重复 1-4 个图像)将立即实例化(或至少在很短的时间间隔内)这会干扰图像加载过程,因为 prev 加载尚未完成,所以 prev一个返回损坏的视图。你可以处理这样的事情。

1)在实例化之后,使用延迟为 100-200ms 的处理程序在任一方向一次又一次(大约 10 次)翻转视图 setCurrentItem(),这样原来的 4 将超出范围(如果你有屏幕外页面限制,我希望你有因为你的代码的无限性质),稍后将一一创建。

2)使用多个缓冲区对象,

1 个图像 8 个缓冲区

2 个图像 - 每个 4 个缓冲区

3 个图像 - 每个缓冲区 2 个......类似这样的东西。

两者都不是理想的解决方案,但都对我有用,但是。我也想知道你尝试了什么。

于 2012-12-07T13:53:48.213 回答
0

您可能需要在 OnDestoryItem 方法中做一些工作来重新附加已分离的项目。
我已经在这里发布了我的解决方案,https://github.com/antonyt/InfiniteViewPager/issues/2

于 2013-05-24T06:14:12.563 回答
0

解决方案是在 ViewPager 中使用相同的子视图。要做到这一点,而无需将同一个子级分配给父级,就是使用 ProxyView 和内部的真实视图。从 ViewGroup 扩展 Fake View 并覆盖 Draw 方法就可以了!

于 2012-12-17T15:49:39.637 回答
-1

尝试以下我已成功用于制作 (faux)infinite 的技巧ListView

在适配器的getCount()方法中,返回 Integer.MAX_VALUE。

然后在适配器的instantiateItem()ordestroyItem()中,使用position % datasource.size()

这个技巧取自HERE

于 2012-12-17T08:35:42.983 回答