首页 文章 精选 留言 我的

精选列表

搜索[内容显示],共10000篇文章
优秀的个人博客,低调大师

ViewPager 实现 Galler 效果, 中间大图显示,两边小图展示

上一张效果图: 之前的项目有一个Galley的项目,但是代码结构特别乱,别问我为什么,我也是刚接手这个项目,为了方便以后阅读和维护我对一些模块进行了重构。ViewPager实现Galler效果,但是当时时间比较急,写的比较仓促,上一篇实现了简单的效果,但是对于初始的时候左边滑动是有问题的,这是因为我们在自己的Adapter的时候对于getCount,我们想通过Integer.MAX_VALUE来实现无限循环,简单的说这个是向右(无限大)吧,所以也就只是实现了向右的循环,对于像左的还是不行的。 那么怎么解决呢? 首先我们对Adapter还是需要按以前的写法,其实Adapter适配器就是帮我们做界面的,其他的逻辑最好不要加,我之前的想法是用过 viewPager.addOnPageChangeListener来实现,通过判断是否滑到最左边或者最右边来实现循环滑到。 [html] view plain copy print ? intrealPosition=mAdapter.toRealPosition(position); if(mPreviousPosition!=realPosition){ mPreviousPosition=realPosition; if(mOuterPageChangeListener!=null){ mOuterPageChangeListener.onPageSelected(realPosition); } } 这里我封装了一个类,只要将你的ViewPager改为我封装好的ViewPager就行 LoopViewPager [html] view plain copy print ? publicclassLoopViewPagerextendsViewPager{ privatestaticfinalbooleanDEFAULT_BOUNDARY_CASHING=false; privateOnPageChangeListenermOuterPageChangeListener; privateLoopPagerAdapterWrappermAdapter; privatebooleanmBoundaryCaching=DEFAULT_BOUNDARY_CASHING; publicstaticinttoRealPosition(intposition,intcount){ position=position-1; if(position<0){ position+=count; }else{ position=position%count; } returnposition; } publicvoidsetBoundaryCaching(booleanflag){ mBoundaryCaching=flag; if(mAdapter!=null){ mAdapter.setBoundaryCaching(flag); } } @Override publicvoidsetAdapter(PagerAdapteradapter){ mAdapter=newLoopPagerAdapterWrapper(adapter); mAdapter.setBoundaryCaching(mBoundaryCaching); super.setAdapter(mAdapter); setCurrentItem(0,false); } @Override publicPagerAdaptergetAdapter(){ returnmAdapter!=null?mAdapter.getRealAdapter():mAdapter; } @Override publicintgetCurrentItem(){ returnmAdapter!=null?mAdapter.toRealPosition(super.getCurrentItem()):0; } publicvoidsetCurrentItem(intitem,booleansmoothScroll){ intrealItem=mAdapter.toInnerPosition(item); super.setCurrentItem(realItem,smoothScroll); } @Override publicvoidsetCurrentItem(intitem){ if(getCurrentItem()!=item){ setCurrentItem(item,true); } } @Override publicvoidsetOnPageChangeListener(OnPageChangeListenerlistener){ mOuterPageChangeListener=listener; }; publicLoopViewPager(Contextcontext){ super(context); init(); } publicLoopViewPager(Contextcontext,AttributeSetattrs){ super(context,attrs); init(); } privatevoidinit(){ super.setOnPageChangeListener(onPageChangeListener); } privateOnPageChangeListeneronPageChangeListener=newOnPageChangeListener(){ privatefloatmPreviousOffset=-1; privatefloatmPreviousPosition=-1; @Override publicvoidonPageSelected(intposition){ intrealPosition=mAdapter.toRealPosition(position); if(mPreviousPosition!=realPosition){ mPreviousPosition=realPosition; if(mOuterPageChangeListener!=null){ mOuterPageChangeListener.onPageSelected(realPosition); } } } @Override publicvoidonPageScrolled(intposition,floatpositionOffset, intpositionOffsetPixels){ intrealPosition=position

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册