我正在尝试使用 ViewPager 组件实现无限轮播。我基于Antonyt创建的一个,但使用少于 4 个视图时会出现问题。由于视图已经到位。必须是一种欺骗 Viewpager 在不同位置绘制相同视图/页面的方法。
4 回答
我遇到了同样的问题,自己找不到解决方案。但我想只使用 1-4 个视图是不可能的。问题是所有视图(重复 1-4 个图像)将立即实例化(或至少在很短的时间间隔内)这会干扰图像加载过程,因为 prev 加载尚未完成,所以 prev一个返回损坏的视图。你可以处理这样的事情。
1)在实例化之后,使用延迟为 100-200ms 的处理程序在任一方向一次又一次(大约 10 次)翻转视图 setCurrentItem(),这样原来的 4 将超出范围(如果你有屏幕外页面限制,我希望你有因为你的代码的无限性质),稍后将一一创建。
2)使用多个缓冲区对象,
1 个图像 8 个缓冲区
2 个图像 - 每个 4 个缓冲区
3 个图像 - 每个缓冲区 2 个......类似这样的东西。
两者都不是理想的解决方案,但都对我有用,但是。我也想知道你尝试了什么。
您可能需要在 OnDestoryItem 方法中做一些工作来重新附加已分离的项目。
我已经在这里发布了我的解决方案,https://github.com/antonyt/InfiniteViewPager/issues/2
解决方案是在 ViewPager 中使用相同的子视图。要做到这一点,而无需将同一个子级分配给父级,就是使用 ProxyView 和内部的真实视图。从 ViewGroup 扩展 Fake View 并覆盖 Draw 方法就可以了!
尝试以下我已成功用于制作 (faux)infinite 的技巧ListView
。
在适配器的getCount()
方法中,返回 Integer.MAX_VALUE。
然后在适配器的instantiateItem()
ordestroyItem()
中,使用position % datasource.size()
这个技巧取自HERE。