首页 文章 精选 留言 我的

精选列表

搜索[图片显示],共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

资源下载

更多资源
腾讯云软件源

腾讯云软件源

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

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

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

用户登录
用户注册