图片轮播之无限轮播
发布日期:2021-06-30 18:38:27
浏览次数:3
分类:技术文章
本文共 2275 字,大约阅读时间需要 7 分钟。
用ViewPager来实现轮播,会考虑到无限轮播和左右循环,需要做到以下5步: //1.把图片的总数改为整数的最大值,做为虚假的图片数量 //2.在用到position的地方进行%运算,这样可以保证得到的position的不会数组越界 //3.设置虚假图片位置的起点为整数最大值的中间 //4.算出真正图片位置与起点的偏差值 //5.整数最大值的中间-真正图片位置与起点的偏差值/*================================= 适配器的设置 =================================*/ class PictureAdapter extends PagerAdapter { @Override public int getCount() { // TODO if (mData != null) { //1.把图片的总数改为整数的最大值,做为虚假的图片数量 return Integer.MAX_VALUE; } return 0; } @Override public boolean isViewFromObject(View view, Object object) { // TODO return view == object; } @Override public Object instantiateItem(ViewGroup container, int position) { // TODO //2.在用到position的地方进行%运算,这样可以保证得到的position的不会数组越界 //position(真正的图片位置) = position(虚假的图片位置) % mData.size()(图片数量); position = position % mData.size(); ImageView iv = new ImageView(UIUtils.getContext()); iv.setImageResource(R.drawable.ic_default); String url = URLS.IMAGEBASEURL + mData.get(position); BitmapHelper.display(iv, url); container.addView(iv); return iv; } @Override public void destroyItem(ViewGroup container, int position, Object object) { // TODO container.removeView((View) object); } } /*================================= viewPager的触摸事件设置 =================================*/ // 设置viewpager的滑动事件 mViewPager.setOnPageChangeListener(new OnPageChangeListener() { @Override public void onPageSelected(int position) { // TODO //2.在用到position的地方进行%运算,这样可以保证得到的position的不会数组越界 //position(真正的图片位置) = position(虚假的图片位置) % mData.size()(图片数量); position = position % mData.size(); for (int i = 0; i < mData.size(); i++) { View indicatorView = mContainer.getChildAt(i); indicatorView .setBackgroundResource(R.drawable.indicator_normal); if (i == position) { indicatorView .setBackgroundResource(R.drawable.indicator_selected); } } } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { // TODO } @Override public void onPageScrollStateChanged(int state) { // TODO } }); //4.算出真正图片位置与起点的偏差值 int diff = Integer.MAX_VALUE / 2 % mData.size(); //3.设置虚假图片位置的起点为整数最大值的中间,这样可以使得轮播一开始从可以划到左边的效果,但是可能出现获取到的真正图片位置不是从0开始的现象,所以要算出真正图片位置与起点的偏差值 mViewPager.setCurrentItem(Integer.MAX_VALUE / 2 - diff);
转载地址:https://linqiarui.blog.csdn.net/article/details/50764633 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
不错!
[***.144.177.141]2024年04月18日 03时30分48秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
UVA 11426 GCD - Extreme (II)(欧拉函数)
2019-04-30
HDU-2838 Cow Sorting(树状数组)
2019-04-30
POJ-2299 Ultra-QuickSort(树状数组)(离散化)
2019-04-30
基于SSM的兼职论坛系统的设计与实现
2019-04-30
基于java的图书管理系统的设计与实现
2019-04-30
基于java的SSM框架理财管理系统的设计与实现
2019-04-30
基于java的ssm框架就业信息管理系统的设计
2019-04-30
基于java的ssm框架的旅游网站设计与实现
2019-04-30
基于java的SSM框架的流浪猫救助网站的设计与实现
2019-04-30
基于java的SSM框架的教务关系系统的设计与实现
2019-04-30
别再问我什么是A/B测试了!
2019-04-30
如何用同期群分析模型提升留存?(Tableau实战)
2019-04-30
爱了,吹爆这个高颜值的流程图工具!
2019-04-30
一个数据项目
2019-04-30
基于JAVA_JSP电子书下载系统
2019-04-30
基于java出租车计价器设计与实现
2019-04-30
基于java的B2C的网上拍卖系统
2019-04-30
十二时辰篇:这该死的 996
2019-04-30
2021最新 上海互联网公司排名
2019-04-30