👉关于作者
众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣!!!
专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)
👉即将学会
解决Bug,哈哈——Bug使人心碎。
👉背景
前天有个朋友丢来一张图 说viewpager的滑动出现问题
🙎小芝:就是我提出的哎。
🙈小空:嗯......
👉实践过程
Bug:
- 滑动的时候出现一张空白页
- 一个View同时使用了2个Parent
原技术实现:数据源只有2张图片,有伪无限轮播的实现 轮播点的实现
第一个问题的原因:
- 页面数=1时,页面静止;
- 页面数=>2时,页面滑动不会产生空白
- 无限循环的ViewPager在轮滑页面低于3个时,总是会报错
因此,我们可以模拟一些图片基本思路: 当图片数量为2的时候,按原图片顺序再依次添加,图片数翻倍变为4,防止出现空白页,但是轮播点的个数依然写为2
这样第一个问题有了解决基础(还未完),别急,接着看。百度上面找了下,找了很久始终未找到足够完美,或者说简洁的ViewPager适配器代码,因此我也下载了几个DEMO测试,无限循环的ViewPager在轮滑页面低于3个时总是会报错。
首先我们要明白报错是为什么,如何解决,大部分原因应该都是父类Parent引起的,因为同一个View不能同时使用不同父Parent,经过测试,在addView和removeView方法时就会报错,网上方法:
// // 取得view的父组件,然后移除view
ViewGroup parent = (ViewGroup) v.getParent();
if (parent != null) {
parent.removeAllViews();
}
在加载移除时,加上如下代码,虽然不报错了,但是滑动的时候会导致其他页面里全是空页面,为加载出我们想要的视图,显然这不是我们想要的效果。
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
View v = list.get(position % list.size());
ViewGroup parent = (ViewGroup) v.getParent();
if (parent != null) {
parent.removeView(v);
}
container.addView(v);
return v;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
}
@Override
public int getCount() {
if (list == null) {
return 0;
}
return Integer.MAX_VALUE;
}
问题解决!
这样一个无限循环的ViewPager适配器已经做出来了,本来还有很多东西,监听,导航介绍,滚动圆点页码等等就不多做介绍了!
👉其他
📢作者:小空和小芝中的小空
📢转载说明:务必注明来源:芝麻粒儿 的个人主页 (juejin.cn)。
📢欢迎点赞👍收藏🌟留言📝