用于Android宽屏设备中组图的循环展示方法及系统
技术领域
本发明涉及电子视图展示领域,具体涉及一种用于Android宽屏设备中组图的循环展示方法及系统。
背景技术
在Android宽屏设备的画廊(类似于轮播图的控件,需要一屏展示多页,一般用来展示一组高清图片,可左右滑动循环切换)一般放在APP首页顶部,以用于展示热门资源。由于画廊中的图片(尤其是高清图片)比较占用内存,Android宽屏设备从服务器获取的画廊图片的总数量一般控制在20幅以内,以防止图片数量过多导致内存溢出。
目前,Android宽屏设备实现无线循环展示画廊中图片的方法一般为以下2种:
(1)直接绘制并展示Android宽屏设备的适配器从服务器中获取的图片,当图片页面中的第一幅图片滚动至最后一幅时,图片页面快速回滚至第一页,同理,从最后一幅图片回滚至第一幅图片时,图片页面会快速向后滚动至最后一页,进而达到无限循环。
方法(1)在快速滚动图片页面时,需要按滚动顺序重新绘制图片页面中的所有图片,此时滚动后需要展示的第一幅图片会最后绘制,因此方法(1)在快速滚动图片页面后,可能出现滚动后需要展示的第一幅图片尚未绘制完成,进而无法顺利的从滚动之前的图片过渡至滚动之后的图片(即会出现图片拉扯),极大的降低了用户体验。
(2)设置画廊中的图片的循环展示次数为无限次n,即适配器中图片页面数量为Integer.MAX_VALUE/n组。每次需要循环展示时,Android宽屏设备绘制适配器中的1组图片页面的图片,以此实现无限展示图片。绘制图片页面中的图片时,根据绘制图片的实际索引值,计算适配器中的相对索引值后,绘制并展现相对索引值对应的图片。
方法(2)使用时,由于适配器中的图片数量较多,图片的索引值较大(例如达到210),因此计算相对索引值时,不仅需要的计算时间较长,降低了Android宽屏设备的工作效率;还会占用CPU大量的内存,不仅降低了Android宽屏设备的工作质量,而且难以在内存较小的低配Android宽屏设备上使用(因为有可能出现内存溢出,从而引发观看图片卡顿),提高了Android宽屏设备的使用需求,降低了用户体验。
与此同时,参见图1所示,方法(2)使用时,需要沿同一方向顺次绘制图片(一般为自左向右,左边的图片先绘制,右边的图片后绘制);为了达到图片的层次效果,每绘制一幅图片(View)后就会重置画布(Canvas),以使得绘制好的图片覆盖于上一幅图片之上。参见图2所示,Android宽屏设备在一屏(即一组图片页面)展示多页时,需要将居中的图片(图片1)放大、并覆盖左右两侧的图片(图片0和2),以显示图片置项效果。
但是,图1的绘制顺序会造成居中的图片(图片1)被后绘制的图片(图片2)覆盖,因此方法(2)绘制图片时,需要将居中和其右边图片的绘制顺序进行调换(即逆向绘制),进而会使得绘制图片的实际索引值,与适配器中的相对索引值不对应,若出现此情况,则播放的居中图片为错误图片。
发明内容
针对现有技术中存在的缺陷,本发明解决的技术问题为:1、如何精准的循环展示组图的每一幅图片;2、如何在循环展示组图图片的过程中,对循环展示的图片进行顺利过渡。
为达到以上目的,本发明提供的用于Android宽屏设备中组图的循环展示方法,包括以下步骤:
步骤A:根据需要展示的组图形成环形图片数组,环形图片数组中包括顺次排列的首部过渡图片、组图中的每幅图片和尾部过渡图片;对环形图片数组中的所有图片进行索引标记,转到步骤B;
步骤B:按照组图中图片的展示顺序,将环形图片数组中对应的图片形成先入先出队列,先入先出队列中的每幅图片均附有对应的索引标记,转到步骤C;
步骤C:需要在先入先出队列的队尾添加图片时,计算展示图片相对于环形图片数组的索引标记S添,计算公式为:S添=(S中-1)%L-1,其中%代表取余运算;在环形图片数组中将索引标记为S添的图片添加至先入先出队列的队尾。
本发明提供的用于Android宽屏设备中组图的循环展示系统,包括环形图片数组创建模块、先入先出队列创建模块和图片循环展示模块;
环形图片数组创建模块用于:根据需要展示的组图创建环形图片数组,环形图片数组中包括顺次排列的首部过渡图片、组图中的每幅图片和尾部过渡图片;对环形图片数组中的所有图片进行索引标记,向先入先出队列创建模块发送先入先出队列创建信号;
先入先出队列创建模块用于:收到先入先出队列创建信号后,按照组图中图片的展示顺序,将环形图片数组中对应的图片形成先入先出队列,先入先出队列中的每幅图片均附有对应的索引标记;
图片循环展示模块用于:需要在先入先出队列的队尾添加图片时,计算展示图片相对于环形图片数组的索引标记S添,计算公式为:S添=(S中-1)%L-1,其中%代表取余运算;在环形图片数组中将索引标记为S添的图片添加至先入先出队列的队尾。
与现有技术相比,本发明的优点在于:
一、参见步骤A可知,本发明在循环展示图片之前,预先绘制形成附有索引标记的环形图片数组,参见步骤C可知,本发明循环展示图片时(即步骤C中需要在先入先出队列的队尾添加图片时),直接根据自主研发的计算公式,在环形图片数组中计算添加图片的索引值,根据索引值添加图片即可。
有鉴于此:
与现有技术中在滚动时重新绘制所有图片的方法(1)相比,本发明循环展示图片时不需要滚动页面,直接添加图片即可,本发明添加图片的耗时远小于方法(1)中重新绘制所有图片的时长,不会出现方法(1)中无法顺利过渡导致图片拉扯的情形,进而显著的提高了用户体验。
与此同时,与现有技术中的计算较大的图片索引值的方法(2)相比,本发明环形图片数组中的图片数量和索引值均较小,进而显著加快了索引值的计算过程,显著提高了Android宽屏设备的工作效率。在此基础上,本发明计算索引值时占用的内存非常小,不会出现内存溢出的问题,不仅提升了Android宽屏设备的工作质量,而且对Android宽屏设备的内存限制微乎其微,降低了Android宽屏设备的使用需求,提高了用户体验。
二、本发明的环形图片数组中的首部过渡图片为需要展示的组图中的最后一幅图片(即为循环展示时的上一幅图片),尾部过渡图片为组图中的第一幅图片。以首部过渡图片、组图图片和尾部过渡图片排列而成的环形图片数组,在图片少量较少的基础上包含了循环展示组图的所有图片,不仅节省了内存资源,而且能够早循环展示组图时,保证组图的完美过渡切换,进一步提升了Android宽屏设备的工作质量和用户体验。
附图说明
图1为现有技术中的图片绘制顺序示意图;
图2为现有技术中的图片展示顺序示意图;
图3为本发明实施例中用于Android宽屏设备中组图的循环展示方法的流程图。
具体实施方式
以下结合附图及实施例对本发明作进一步详细说明。
参见图3所示,本发明实施例中的用于Android宽屏设备中组图的循环展示方法,包括以下步骤:
S1:从服务端中获取需要展示的组图,一组组图包括至少3~20幅图片,按照图片展示顺序依次绘制组图中的图片,转到S2。
S2:在首部的图片之前绘制首部过渡图片(即S1中绘制的最后一幅图片),在尾部的图片之后绘制尾部过渡图片(即S1中绘制的第一幅图片),将绘制的所有图片形成环形图片数组。按照环形图片数组中图片的排列顺序,从0开始对环形图片数组中的所有图片进行索引标记(索引标记为自然数),转到S3。
S2举例如下:S1中组图图片的展示顺序为图片0,图片1,图片2,S2中的环形图片数组中所有图片的排列顺序为图片2,图片0,图片1,图片2,图片0。S2中环形图片数组中的所有图片的索引标记依次为0,1,2,3,4。
S2的原理为:Android开发是基于面向对象一种编程模式,从后台服务器获取的JSON数据需要解析成对象集合,并用List(线性集合)进行保存,线性集合的优点是支持泛型、查询效率高,但缺点是增删慢,随着容量的增加效率逐渐降低。由于队列不支持泛型,因此适配器数据依然只能使用List保存,为了形成类似环形队列的结构,本发明实施例采用集合头尾追加的方式形成一个伪环形数组。
S2的好处为:与现有技术中的计算较大的图片索引值相比,本发明实施例中适配器绘制的图片数量和索引值均较小,进而显著加快了后期的计算过程,提高了Android宽屏设备的工作效率。与此同时,计算时占用CPU内存非常小,不会出现内存溢出的问题,不仅提升了Android宽屏设备的工作质量,而且对Android宽屏设备的内存限制微乎其微,降低了Android宽屏设备的使用需求,提高了用户体验。
S3:在环形图片数组中,调取S1中需要展示的组图图片,按照S1中的图片展示顺序,将调取的所有图片形成先入先出队列;先入先出队列中的每幅图片均附有对应的索引标记。至此,可以通过先入先出队列来展示S1中的组图,转到S4。
S4:当需要循环展示组图的图片时(即需要切换图片,例如从最后一幅切换至第一幅),则需要在先入先出队列的队尾添加展示图片。此时需要计算展示图片相对于环形图片数组的索引标记S添,计算公式为:S添=(S中-1)%L-1,其中S中代表居中方法的图片的索引标记,L代表环形图片数组中图片的总数量,%代表取余运算。在环形图片数组中将索引标记为S添的图片添加至先入先出队列的队尾。将先入先出队列队首的图片删除,以节省内存资源;至此,即可通过先入先出队列循环展示S1中的组图。
本发明实施例中的用于Android宽屏设备中组图的循环展示系统,包括环形图片数组创建模块、先入先出队列创建模块和图片循环展示模块。
环形图片数组创建模块用于:从服务端中获取需要展示的组图,按照图片展示顺序依次绘制组图中的图片,在首部的图片之前绘制首部过渡图片(组图中的最后一幅图片),在尾部的图片之后绘制尾部过渡图片(组图中的第一幅图片)。根据需要展示的组图创建环形图片数组,环形图片数组中包括顺次排列的首部过渡图片、组图中的每幅图片和尾部过渡图片。按照环形图片数组中图片的排列顺序,从0开始对环形图片数组中的所有图片进行索引标记,索引标记为自然数;向先入先出队列创建模块发送先入先出队列创建信号。
先入先出队列创建模块用于:收到先入先出队列创建信号后,按照组图中图片的展示顺序,将环形图片数组中对应的图片形成先入先出队列,先入先出队列中的每幅图片均附有对应的索引标记;
图片循环展示模块用于:需要在先入先出队列的队尾添加图片时,计算展示图片相对于环形图片数组的索引标记S添,计算公式为:S添=(S中-1)%L-1,其中S中代表居中方法的图片的索引标记,L代表环形图片数组中图片的总数量,%代表取余运算;在环形图片数组中将索引标记为S添的图片添加至先入先出队列的队尾,将先入先出队列队首的图片删除。
至此,从本发明实施例可知,本发明能够顺利的循环展示时切换的图片,还能够在占用较小内存的同时提高Android宽屏设备的工作效率,不仅提升了Android宽屏设备的工作质量,而且降低了Android宽屏设备的使用需求,显著的提高了用户体验,非常适于推广。
进一步,本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。