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