适用于页面滚动的焦点置顶方法、存储介质、设备及系统
技术领域
本发明涉及安卓电视的焦点特效技术领域,具体来讲是一种适用于页面滚动的焦点置顶方法、存储介质、设备及系统。
背景技术
随着智能电视及安卓操作系统的快速发展,安卓电视已日益普及,并受到越来越多人的追捧。所谓安卓电视,顾名思义是搭载了安卓操作系统(Android)的电视,使得电视智能化,能让电视机实现网页浏览、视频电影观看、聊天办公游戏等。
为了便于读者理解,下面先对相关术语进行简单说明:
View(视图):它是安卓系统应用层界面可视化的基本组件单元;
ViewGroup(视图组):它是安卓系统可视化组件View的基本容器单元,可容纳多个视图View;
焦点(Focus)特效:指安卓系统在接收到遥控器或手机等设备的按键信号源后,处理对应指令做出UI层面的显示特效,例如缩放、偏移、背景切换等;
置顶(BringToFront):指获得焦点的视图位于其所在视图组的其他视图的最上层(Z轴方向);
焦点视图的绘制图层(FocusLayerType):指焦点视图的绘制图层层级,一般在视图组中每个视图的绘制图层层级为该视图的索引值index,图层层级越大,视图所在的图层层级越好,视图在空间Z轴方向的坐标值z越大;
双向队列(LinkedList):是一种双向开口的连续线性空间,可以高效的在头尾两端插入和删除元素的数据结构;
时间复杂度(O):计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间;这是一个关于代表算法输入值的字符串的长度的函数;时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数;使用这种方式时,时间复杂度可被称为是渐近的,它考察当输入值大小趋近无穷时的情况;
快速排序(Quicksort):一种通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列的算法;
UI(User Interface):泛指用户的操作界面,UI设计主要指界面的样式,美观程度;
绘制(onDraw):指安卓系统在绘制视图View的过程;
属性动画(Property Animation):安卓系统中,属性动画可以作用在视图的属性上,对属性进行修改,而且不要求对应的属性一定是有显示效果。
安卓电视在UI交互过程中,为突出焦点的移动和吸引用户注意力通常会给当前获得焦点的视图设置一系列的特效。最常见的一种焦点特效就是放大置顶:放大(ScaleUp)就是给焦点视图设置放大动画;置顶(BringToFront)就是设置焦点视图在周边视图的最上层,也就是在屏幕三维坐标的Z轴方向设置其z值大于周边视图的z值。其中,放大的特效实现比较容易,一般使用属性动画(Property Animation)或者尺寸变化动画(ScaleAnimation)即可。置顶的特效,现有的实现方式一般是使用安卓系统源生提供的BringChildToFront机制。在安卓系统源码中BringChildToFront机制的实现原理和过程如下:
1)调用已有的ViewGroup.bringChildToFront传入焦点视图;
2)系统获取焦点视图的内存指针、id(或资源id);
3)系统将焦点视图的绘制任务(Runnable)从现有任务队列的索引位置Rc偏移到队列最末尾Rl;
4)系统重置画布(Canvas)的层级(LayerType),将层级等级置为Rl;
5)系统在Canvas上重绘焦点视图。
安卓系统在绘制视图组的过程类似于在画布上作画,图层一层一层叠加,每一个图层绘制一个视图,最后绘制的图层在最上层,因此会覆盖在其他图层之上,进而达到置顶的效果。而BringChildToFront机制实现焦点视图的置顶就是将焦点视图的绘制任务放到任务队列最末尾,然后重绘整个视图组,即重新执行任务队列的所有绘制任务。
虽然安卓系统源生的BringChildToFront机制简单易用,但在实际应用中,依然存在以下问题和局限性:
(1)BringChildToFront机制在进行焦点置顶过程中使用了一次顺序迭代的算法将焦点视图所在的图层绘制任务偏移至队列最末,且不会迭代第二次,因此该方法的再现性低;并且,每次都需重绘整个视图组,即使视图组中某些视图不需要再显示绘制,也还是会被重绘,因此存在过度重绘问题,在低配机型下将导致页面卡顿的问题。
(2)BringChildToFront机制只在静态(IDEL)页面有效。由于BringChildToFront机制需要偏移焦点视图的绘制任务,因此要求绘制任务队列相对稳定,页面不存在滚动的情况下才有效(页面存在滚动时,会有新的视图添加到绘制任务中也会有旧的视图需要销毁而不需绘制)。对此,现有的BringChildToFront机制是无法适用于页面滚动的情况的。
发明内容
本发明的目的是为了克服上述背景技术的不足,提供一种适用于页面滚动的焦点置顶方法、存储介质、设备及系统,能实现页面滚动情况下的焦点视图置顶,而且也不会存在因过度重绘而导致页面卡顿的问题。
为达到以上目的,本发明采取的技术方案是:提供一种适用于页面滚动的焦点置顶方法,该方法包括以下步骤:
S1、当页面开始滚动时,获取页面滚动前视图组下所有视图的图层层级结构;将获取到的层级结构保存至一个双向队列中,并记为第一双向队列;在第一双向队列中,获取到焦点视图的图层层级;
S2、当页面滚动结束且页面处于静止状态时,获取当前页面内视图组下所有视图的图层层级结构;将获取到的层级结构保存至另一个双向队列中,并记为第二双向队列;在第二双向队列中,获取到焦点视图的图层层级;
S3、将第一双向队列中的层级结构与第二双向队列中的层级结构进行比较,判断是否需要进行焦点视图的图层层级的偏移,若是,转入S4;若否,则结束;
S4、采用快速排序对第二双向队列中的图层层级进行排序;并将第二双向队列中焦点视图的图层层级调整偏移至与第一双向队列中焦点视图的图层层级相同;
S5、根据偏移完成后的第二双向队列中的图层层级结构进行视图组的绘制。
在上述技术方案的基础上,步骤S1具体包括以下流程:
S101、为视图组设置滚动监听器;
S102、当滚动监听器监听到页面开始滚动时,滚动监听器通过调用视图层级结构获取函数,获取页面滚动前视图组下所有视图的图层层级结构;
S103、将获取到的所有视图的层级结构保存至一个双向队列中,并记为第一双向队列;
S104、在第一双向队列中,获取到焦点视图的图层层级。
在上述技术方案的基础上,步骤S4具体包括以下流程:
计算第二双向队列的时间复杂度以及第二双向队列的最小时间复杂度,并将第二双向队列的时间复杂度与第二双向队列的最小时间复杂度进行比较;
若第二双向队列的时间复杂度大于第二双向队列的最小时间复杂度,则采用快速排序对第二双向队列中的图层层级进行排序;并直接将第二双向队列中焦点视图的图层层级调整至与第一双向队列中焦点视图的图层层级相同;
若第二双向队列的时间复杂度小于第二双向队列的最小时间复杂度,则采用快速排序对第二双向队列中的图层层级进行排序;再使用安卓系统源生的BringChildToFront机制进行顺序迭代,将第二双向队列中焦点视图的图层层级调整至与第一双向队列中焦点视图的图层层级相同。
本发明还提供一种存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述适用于页面滚动的焦点置顶方法的步骤。
本发明还提供一种适用于页面滚动的焦点置顶设备,包括存储器、处理器及存储在存储器上并在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述适用于页面滚动的焦点置顶方法的步骤。
本发明还提供一种适用于页面滚动的焦点置顶系统,该系统包括滚动前层级结构获取模块、滚动后层级结构获取模块、偏移判断模块、偏移模块和新视图组绘制模块;
所述滚动前层级结构获取模块用于:当页面开始滚动时,获取页面滚动前视图组下所有视图的图层层级结构;将获取到的层级结构保存至一个双向队列中,并记为第一双向队列;在第一双向队列中,获取到焦点视图的图层层级;向滚动后层级结构获取模块发送获取信号;
所述滚动后层级结构获取模块用于:收到获取信号后,当页面滚动结束且页面处于静止状态时,获取当前页面内视图组下所有视图的图层层级结构;将获取到的层级结构保存至另一个双向队列中,并记为第二双向队列;在第二双向队列中,获取到焦点视图的图层层级;向偏移判断模块发送偏移判断信号;
所述偏移判断模块用于:收到偏移判断信号后,将第一双向队列中的层级结构与第二双向队列中的层级结构进行比较,判断是否需要进行焦点视图的图层层级的偏移,若是,向偏移模块发送偏移信号;若否,结束操作;
所述偏移模块用于:收到偏移信号后,采用快速排序对第二双向队列中的图层层级进行排序;并将第二双向队列中焦点视图的图层层级调整偏移至与第一双向队列中焦点视图的图层层级相同;向新视图组绘制模块发送绘制信号;
所述新视图组绘制模块用于:收到绘制信号后,根据偏移完成后的第二双向队列中的图层层级结构进行视图组的绘制。
在上述技术方案的基础上,所述滚动前层级结构获取模块包括滚动监听器设置子模块、图层层级结构获取子模块、第一双向队列保存子模块、焦点层级获取子模块;
所述滚动监听器设置子模块用于:为视图组设置滚动监听器;
所述图层层级结构获取子模块用于:当滚动监听器监听到页面开始滚动时,滚动监听器通过调用视图层级结构获取函数,获取页面滚动前视图组下所有视图的图层层级结构;
所述第一双向队列保存子模块用于:将获取到的所有视图的层级结构保存至一个双向队列中,并记为第一双向队列;
所述焦点层级获取子模块用于:在第一双向队列中,获取到焦点视图的图层层级。
在上述技术方案的基础上,所述滚动前层级结构获取模块还包括焦点层级记录子模块和焦点层级校正子模块;
所述焦点层级记录子模块用于:当页面开始滚动时,会记录下当前焦点视图的图层层级;
所述焦点层级校正子模块用于:当焦点层级获取子模块在第一双向队列中获取到焦点视图的图层层级后,将焦点层级记录子模块记录的焦点视图的图层层级与焦点层级获取子模块获取到焦点视图的图层层级进行比较;若焦点层级记录子模块记录的焦点视图的图层层级小于或等于焦点层级获取子模块获取到焦点视图的图层层级,则保持获取到的焦点视图的图层层级不变;若焦点层级记录子模块记录的焦点视图的图层层级大于焦点层级获取子模块获取到焦点视图的图层层级,则将获取到的焦点视图的图层层级修正为记录的焦点视图的图层层级。
在上述技术方案的基础上,所述偏移判断模块判断是否需要进行焦点视图的图层层级的偏移的依据为:
若第一双向队列中的层级个数与第二双向队列中的层级个数相同,采用迭代器进行两个双向队列中的元素Hash值的比较;若两个双向队列中对应的元素的Hash值一致,判定无需进行焦点视图的图层层级的偏移;
若第一双向队列中的层级个数与第二双向队列中的层级个数相同,采用迭代器进行两个双向队列中的元素Hash值的比较;若两个双向队列中对应的元素的Hash值有一个存在不一致,则判定需要进行焦点视图的图层层级的偏移;
若第一双向队列中的层级个数与第二双向队列中的层级个数不相同,则直接判定需要进行焦点视图的图层层级的偏移。
在上述技术方案的基础上,所述偏移模块进行焦点视图的图层层级偏移的具体流程为:
计算第二双向队列的时间复杂度以及第二双向队列的最小时间复杂度,并将第二双向队列的时间复杂度与第二双向队列的最小时间复杂度进行比较;
若第二双向队列的时间复杂度大于第二双向队列的最小时间复杂度,则采用快速排序对第二双向队列中的图层层级进行排序;并直接将第二双向队列中焦点视图的图层层级调整至与第一双向队列中焦点视图的图层层级相同;
若第二双向队列的时间复杂度小于第二双向队列的最小时间复杂度,则采用快速排序对第二双向队列中的图层层级进行排序;再使用安卓系统源生的BringChildToFront机制进行顺序迭代,将第二双向队列中焦点视图的图层层级调整至与第一双向队列中焦点视图的图层层级相同。
本发明的有益效果在于:
(1)本发明中,采用了两个双向队列来分别保存滚动前与滚动后视图组下所有视图的图层层级结构,并在第一双向队列中获取到焦点视图的图层层级;再根据两个双向队列中的层级结构差异判断是否需要进行焦点视图的图层层级的偏移;若需要偏移,则采用快速排序对第二双向队列中的图层层级进行排序,并将第二双向队列中焦点视图的图层层级调整偏移至与第一双向队列中焦点视图的图层层级相同;最后,根据偏移完成后的第二双向队列中的图层层级结构进行视图组的绘制,从而完成焦点视图的置顶。
与现有技术相比,本发明不但能通过上述操作实现页面滚动情况下的焦点视图置顶,而且操作中采用双向队列来保存视图组中整体层级结构的数据,无论页面滚动过程中其上下是否产生新的视图,都能在滚动结束且静止状态时保持最新的整体层级结构,去除了那些不需绘制的旧视图,避免了因旧视图的过度重绘而导致页面卡顿的问题。
(2)本发明中,在进行焦点视图的图层偏移操作时,引入了图层迭代偏移的时间复杂度(O),利用时间复杂度来分析评估图层迭代排序的性能,从而选择出最佳迭代排序方式及偏移调整方式,使得焦点视图的图层偏移更为合理高效。
(3)本发明中,为了防止第一双向队列中存储的焦点视图的图层层级出现因滚动操作导致系统存储延迟,而影响焦点视图的图层层级的值,因此,会对获取到的第一双向队列中的焦点视图的图层层级进行校验修正,进而保证了操作的可靠性。
附图说明
图1为本发明实施例中适用于页面滚动的焦点置顶方法的流程图;
图2为本发明实施例中适用于页面滚动的焦点置顶设备的结构示意图;
图3为本发明实施例中适用于页面滚动的焦点置顶系统的结构框图;
图4为本发明实施例中滚动前层级结构获取模块的具体结构框图;
图5为本发明另一实施例中滚动前层级结构获取模块的具体结构框图。
具体实施方式
下面结合附图及具体实施例对本发明作进一步的详细描述。
参见图1所示,本发明实施例提供一种适用于页面滚动的焦点置顶方法,该方法包括以下步骤:
步骤S1、滚动前层级结构的获取:当页面开始滚动时,获取页面滚动前视图组下所有视图的图层层级结构;将获取到的所有视图的层级结构保存至一个双向队列中,并记为第一双向队列,如HSScroll;在第一双向队列中,获取到焦点视图的图层层级,即焦点视图在第一双向队列中的索引值,如Index(HSScroll)。
可以理解的是,视图组在处于非滚动的静止状态时,其下所有视图构成的整体层级结构相对稳定,每一个视图的图层层级会维持不变,但在滚动过程中由于视图的滑入滑出,整体层级结构会一直处于不稳定状态,而后续滚动停止时,如果整体层级结构和滚动前不一致则需要进行焦点视图的图层层级的偏移,因此,在滚动前需要存储整体层级结构的数据以便滚动结束后进行整体层级结构差异比较。并且,由于滚动前焦点视图的图层层级应当是最高层级,为了便于后续滚动结束后进行焦点视图的图层层级的偏移(后续偏移时需将焦点视图的图层层级继续偏移至最高层级),因此,需获取到第一双向队列中焦点视图的图层层级,因为此时的焦点视图的图层层级最高。另外,由于整体层级结构在页面滚动过程中其上下都有可能产生新的视图,因此本方案采用双向队列来保存整体层级结构的数据,元素对象即为每个视图的图层层级的信息。
在一种实施方式中,步骤S1具体包括以下流程:
步骤S101、为视图组设置一个滚动监听器,如ScrollListener。
步骤S102、当滚动监听器监听到页面开始滚动时,滚动监听器通过调用视图层级结构获取函数,获取页面滚动前视图组下所有视图的图层层级结构。举例来说,滚动监听器ScrollListener可通过调用视图层级结构获取函数getViewHierarchy来获取页面滚动前视图组下所有视图的图层层级结构。
步骤S103、将获取到的所有视图的层级结构保存至一个双向队列中,并记为第一双向队列。
步骤S104、在第一双向队列中,获取到焦点视图的图层层级。
为了防止第一双向队列中存储的焦点视图的图层层级出现因滚动操作导致系统存储延迟,而影响焦点视图的图层层级的值,因此,需要对获取到的第一双向队列中的焦点视图的图层层级进行校验修正。具体来说,步骤S1中,当页面开始滚动时,会记录下当前焦点视图的图层层级,即焦点视图的索引值Index;当在第一双向队列中获取到焦点视图的图层层级后,将记录的焦点视图的图层层级(Inde x)与第一双向队列中获取到焦点视图的图层层级(Index(HSScroll))进行比较;
若Index<=Index(HSScroll),表示焦点视图的图层层级存储及时,则无需对获取到的第一双向队列中的焦点视图的图层层级进行修正,即Index(HSScroll)不变;
若Index>Index(HSScroll),表示焦点视图的图层层级存储延迟,,则需要对获取到的第一双向队列中的焦点视图的图层层级进行修正,将Index(HSScroll)重新赋值为Index。
步骤S2、滚动后层级结构的获取:当页面滚动结束且页面处于静止状态时,获取当前页面内视图组下所有视图的图层层级结构;将获取到的所有视图的层级结构保存至另一个双向队列中,并记为第二双向队列,如HSIDEL;在第二双向队列中,获取到焦点视图的图层层级,即焦点视图在第二双向队列中的索引值,如Index(HSIDEL)。可以理解的是,实际操作中可通过步骤S101中设置的滚动监听器来监听页面是否滚动结束且处于静止状态。
步骤S3、滚动前后的比较判断:将第一双向队列中的层级结构与第二双向队列中的层级结构进行比较,判断是否需要进行焦点视图的图层层级的偏移,若是,转入步骤S4;若否,则结束。
实际操作时,步骤S3中判断是否需要进行焦点视图的图层层级的偏移的依据为:
若第一双向队列中的层级个数与第二双向队列中的层级个数相同,如Length(HSScroll)==Length(HSIDEL),采用迭代器(如Iterator)进行两个双向队列中的元素Hash(哈希)值的比较;若两个双向队列中对应的元素的Hash值一致,则表示滚动前后的图层层级结构未发生改变,即HSScroll==HSIDEL,判定无需进行焦点视图的图层层级的偏移;
若第一双向队列中的层级个数与第二双向队列中的层级个数相同,如Length(HSScroll)==Length(HSIDEL),采用迭代器进行两个双向队列中的元素Hash值的比较;若两个双向队列中对应的元素的Hash值有一个存在不一致,则表示滚动前后的图层层级结构发生了改变,即HSScroll≠HSIDEL,判定需要进行焦点视图的图层层级的偏移;
若第一双向队列中的层级个数与第二双向队列中的层级个数不相同,如Length(HSScroll)≠Length(HSIDEL),则表示滚动前后的图层层级结构发生了改变,即HSScroll≠HSIDEL,判定需要进行焦点视图的图层层级的偏移。
步骤S4、焦点视图层级的偏移:采用快速排序对第二双向队列中的图层层级进行排序;并将第二双向队列中焦点视图的图层层级调整至与第一双向队列中焦点视图的图层层级相同,即将Index(HSIDELl)的位置调整至Index(HSScroll)的位置。可以理解的是,由于滚动后焦点视图的图层层级的位置Index(HSIDELl)被调整到滚动前其所在的层级位置Index(HSScroll),因此焦点视图所在图层在滚动前后的层级结构前后为固定值,均在周边视图的最上层,从而达到了焦点视图的置顶。
进一步地,为了选择出最佳迭代排序方式及偏移调整方式,本实施例中引入图层迭代偏移的时间复杂度(O),利用时间复杂度来分析评估图层迭代排序的性能,从而使得偏移调整更为合理高效。因此,在一种实施方式中,步骤S4具体包括以下流程:
计算第二双向队列的时间复杂度O(HSIDEL)以及第二双向队列的最小时间复杂度log2Length(HSIDEL);
将第二双向队列的时间复杂度O(HSIDEL)与第二双向队列的最小时间复杂度log2Length(HSIDEL)进行比较,
若第二双向队列的时间复杂度大于第二双向队列的最小时间复杂度,即O(HSIDELl)>log2Length(HSIDEL),则采用快速排序对第二双向队列中的图层层级进行排序;并直接将第二双向队列中焦点视图的图层层级调整至与第一双向队列中焦点视图的图层层级相同即可;
若第二双向队列的时间复杂度小于第二双向队列的最小时间复杂度,即O(HSIDELl)<log2Length(HSIDEL),则采用快速排序对第二双向队列中的图层层级进行排序;再使用BringChildToFront机制进行顺序迭代,将第二双向队列中焦点视图的图层层级调整至与第一双向队列中焦点视图的图层层级相同。
步骤S5、新视图组的绘制:待第二双向队列中的焦点视图的图层层级偏移完成后,根据偏移完成后的第二双向队列中的图层层级结构进行视图组的绘制。
通过上述步骤的操作,就可以成功完成页面滚动后的焦点置顶操作,不但能很好的解决页面滚动情况下的焦点视图置顶的问题,而且操作中采用双向队列来保存视图组中整体层级结构的数据,无论页面滚动过程中其上下是否产生新的视图,都能在滚动结束且静止状态时保持最新的整体层级结构,去除了那些不需绘制的旧视图,避免了因旧视图的过度重绘而导致页面卡顿的问题。
对应上述的适用于页面滚动的焦点置顶方法,本发明实施例还提供一种存储介质,其上存储有计算机程序,该计算机程序被处理器执行时可实现上述各实施例中的适用于页面滚动的焦点置顶方法的步骤。需要说明的是,所述存储介质包括U盘、移动硬盘、ROM(Read-Only Memory,只读存储器)、RAM(Random Access Memory,随机存取存储器)、磁碟或者光盘等各种可以存储程序代码的介质。
另外,参见图2所示,对应上述的适用于页面滚动的焦点置顶方法,本发明实施例还提供一种适用于页面滚动的焦点置顶设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,该处理器执行计算机程序时可实现上述各实施例中的适用于页面滚动的焦点置顶方法的步骤。
参见图3所示,本发明实施例还提供一种适用于页面滚动的焦点置顶系统,该系统包括滚动前层级结构获取模块、滚动后层级结构获取模块、偏移判断模块、偏移模块和新视图组绘制模块。
其中,滚动前层级结构获取模块用于:当页面开始滚动时,获取页面滚动前视图组下所有视图的图层层级结构;将获取到的层级结构保存至一个双向队列中,并记为第一双向队列;在第一双向队列中,获取到焦点视图的图层层级;向滚动后层级结构获取模块发送获取信号。
滚动后层级结构获取模块用于:收到获取信号后,当页面滚动结束且页面处于静止状态时,获取当前页面内视图组下所有视图的图层层级结构;将获取到的层级结构保存至另一个双向队列中,并记为第二双向队列;在第二双向队列中,获取到焦点视图的图层层级;向偏移判断模块发送偏移判断信号。
偏移判断模块用于:收到偏移判断信号后,将第一双向队列中的层级结构与第二双向队列中的层级结构进行比较,判断是否需要进行焦点视图的图层层级的偏移,若是,向偏移模块发送偏移信号;若否,结束操作。具体来说,偏移判断模块进行判断的依据为:
若第一双向队列中的层级个数与第二双向队列中的层级个数相同,采用迭代器进行两个双向队列中的元素Hash值的比较;若两个双向队列中对应的元素的Hash值一致,判定无需进行焦点视图的图层层级的偏移;
若第一双向队列中的层级个数与第二双向队列中的层级个数相同,采用迭代器进行两个双向队列中的元素Hash值的比较;若两个双向队列中对应的元素的Hash值有一个存在不一致,则判定需要进行焦点视图的图层层级的偏移;
若第一双向队列中的层级个数与第二双向队列中的层级个数不相同,则直接判定需要进行焦点视图的图层层级的偏移。
偏移模块用于:收到偏移信号后,采用快速排序对第二双向队列中的图层层级进行排序;并将第二双向队列中焦点视图的图层层级调整偏移至与第一双向队列中焦点视图的图层层级相同;向新视图组绘制模块发送绘制信号。具体来说,偏移模块进行焦点视图的图层层级偏移的具体流程为:
计算第二双向队列的时间复杂度以及第二双向队列的最小时间复杂度,并将第二双向队列的时间复杂度与第二双向队列的最小时间复杂度进行比较;
若第二双向队列的时间复杂度大于第二双向队列的最小时间复杂度,则采用快速排序对第二双向队列中的图层层级进行排序;并直接将第二双向队列中焦点视图的图层层级调整至与第一双向队列中焦点视图的图层层级相同;
若第二双向队列的时间复杂度小于第二双向队列的最小时间复杂度,则采用快速排序对第二双向队列中的图层层级进行排序;再使用安卓系统源生的BringChildToFront机制进行顺序迭代,将第二双向队列中焦点视图的图层层级调整至与第一双向队列中焦点视图的图层层级相同。
新视图组绘制模块用于:收到绘制信号后,根据偏移完成后的第二双向队列中的图层层级结构进行视图组的绘制。
进一步地,参见图4所示,所述滚动前层级结构获取模块包括滚动监听器设置子模块、图层层级结构获取子模块、第一双向队列保存子模块、焦点层级获取子模块。
其中,滚动监听器设置子模块用于:为视图组设置滚动监听器;图层层级结构获取子模块用于:当滚动监听器监听到页面开始滚动时,滚动监听器通过调用视图层级结构获取函数,获取页面滚动前视图组下所有视图的图层层级结构;第一双向队列保存子模块用于:将获取到的所有视图的层级结构保存至一个双向队列中,并记为第一双向队列;焦点层级获取子模块用于:在第一双向队列中,获取到焦点视图的图层层级。
更进一步地,为了防止第一双向队列中存储的焦点视图的图层层级出现因滚动操作导致系统存储延迟,而影响焦点视图的图层层级的值,因此,需要对获取到的第一双向队列中的焦点视图的图层层级进行校验修正。在此基础上,参见图5所示,所述滚动前层级结构获取模块还包括焦点层级记录子模块和焦点层级校正子模块。
其中,焦点层级记录子模块用于:当页面开始滚动时,会记录下当前焦点视图的图层层级;
焦点层级校正子模块用于:当焦点层级获取子模块在第一双向队列中获取到焦点视图的图层层级后,将焦点层级记录子模块记录的焦点视图的图层层级与焦点层级获取子模块获取到焦点视图的图层层级进行比较;
若焦点层级记录子模块记录的焦点视图的图层层级小于或等于焦点层级获取子模块获取到焦点视图的图层层级,则保持获取到的焦点视图的图层层级不变;
若焦点层级记录子模块记录的焦点视图的图层层级大于焦点层级获取子模块获取到焦点视图的图层层级,则将获取到的焦点视图的图层层级修正为记录的焦点视图的图层层级。
需要说明的是:上述实施例提供的系统在实现用于页面滚动的焦点置顶操作时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将系统的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。
本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。