网格视图控件的移动控制方法及系统与流程

文档序号:12595838阅读:207来源:国知局
网格视图控件的移动控制方法及系统与流程

本发明涉及计算机技术领域,尤其涉及一种网格视图控件的移动控制方法及系统。



背景技术:

在Android系统开发过程中,通过采用网格视图(GridView)控件来显示大量子视图(View),网格视图(GridView)是一个以网格(Grid)显示子视图(View),即二维、可滚动的网格,在Android系统开发过程中应用广泛。在现有网格视图(GridView)控件中,只能实现特定对称方向的双向滚动,无法实现任意方向滚动的目的。



技术实现要素:

本发明要解决的技术问题在于,针对现有网格视图控件只能在特定对称方向双向滚动的问题,提供一种网格视图控件的移动控制方法及系统。

本发明解决其技术问题所采用的技术方案是:一种网格视图控件的移动控制方法,包括:

初始化配置网格容器的宽高和数据集;所述网格容器的宽高限定所述网格容器的屏幕显示范围,所述数据集包括N*M个呈二维数组结构排布的数据块;

根据子视图的宽高和所述网格容器的宽高,确定所述网格容器的屏幕显示范围中显示的子视图的数量和每一子视图的位置;每一所述子视图对应所述网格容器的屏幕显示范围内的数据块;

接收用户输入的移动控制指令,根据所述移动控制指令获取所述网格容器中的目标子视图的位置;

根据所述目标子视图的位置以及所述网格容器的屏幕显示范围的位置,控制所述网格容器相对于所述数据集移动或静止,以使所述目标子视图位于所述网格容器的屏幕显示范围中。

优选地,所述根据子视图的宽高和所述网格容器的宽高,确定所述网格容器的屏幕显示范围中显示的子视图的数量和每一子视图的位置,包括:

根据所述子视图的宽高和所述网格容器的宽高分别确定所述网格容器的屏幕显示范围中横向显示和纵向显示的子视图的数量;

依据初始默认焦点所在的子视图为起点子视图;

从所述起点子视图开始依据所述横向显示和纵向显示的子视图的数量依次填充,以确定所述网格容器的屏幕显示范围中显示的每一所述子视图的位置。

优选地,所述接收用户输入的移动控制指令,根据所述移动控制指令获取所述网格容器中的目标子视图,包括:

接收用户输入的滚动控制指令,所述滚动控制指令包括目标子视图对应的数据块在所述数据集中的坐标信息;将所述坐标信息对应的数据块确定为所述网格容器中的目标子视图;

或者,接收用户通过点击数据块以输入点击控制指令;将所述点击控制指令所点击到的所述数据块确定所述网格容器中的目标子视图;

或者,接收用户通过滑动手势以输入的滑动控制指令;所述滑动控制指令终点所击中的数据块确定为所述网格容器中的目标子视图。

优选地,所述根据所述起点子视图、目标子视图以及所述网格容器的屏幕显示范围,控制所述网格容器相对于所述数据集移动,以使所述目标子视图位于所述网格容器的屏幕显示范围中,包括:

判断所述目标子视图是否完全位于所述网格容器的屏幕显示范围内;

若目标子视图完全位于网格容器的屏幕显示范围内,则控制所述网格容器相对于所述数据集静止;

若目标子视图不完全位于或者完全不位于网格容器的屏幕显示范围内,则计算使所述目标子视图移动到网格容器的屏幕显示范围内的横向移动和/或纵向移动的最小距离,根据所述横向移动和/或纵向移动的最小距离控制所述网格容器移动,以使所述目标子视图位于所述网格容器的屏幕显示范围内。

优选地,还包括:接收用户输入的屏幕拖动控制指令,控制所述网格视图移动,并在移动过程中使接收所述屏幕拖动控制指令前焦点所在的子视图位于所述网格视图的屏幕显示范围内。

本发明还提供一种网格视图控件的移动控制方法,包括:

初始配置单元,用于初始化配置网格容器的宽高和数据集;所述网格容器的宽高限定所述网格容器的屏幕显示范围,所述数据集包括N*M个呈二维数组结构排布的数据块;

位置确定单元,用于根据子视图的宽高和所述网格容器的宽高,确定所述网格容器的屏幕显示范围中显示的子视图的数量和每一子视图的位置;每一所述子视图对应所述网格容器的屏幕显示范围内的数据块;

指令接收单元,用于接收用户输入的移动控制指令,根据所述移动控制指令获取所述网格容器中的目标子视图的位置;

移动控制单元,用于根据所述目标子视图的位置以及所述网格容器的屏幕显示范围的位置,控制所述网格容器相对于所述数据集移动或静止,以使所述目标子视图位于所述网格容器的屏幕显示范围中。

优选地,所述位置确定单元包括:

视图数量确定子单元,用于根据所述子视图的宽高和所述网格容器的宽高分别确定所述网格容器的屏幕显示范围中横向显示和纵向显示的子视图的数量;

起点视图确定子单元,用于依据初始默认焦点所在的子视图为起点子视图;

视图填充确定子单元,用于从所述起点子视图开始依据所述横向显示和纵向显示的子视图的数量依次填充,以确定所述网格容器的屏幕显示范围中显示的每一所述子视图的位置。

优选地,所述指令接收单元包括:

第一指令接收子单元,用于接收用户输入的滚动控制指令,所述滚动控制指令包括目标子视图对应的数据块在所述数据集中的坐标信息;将所述坐标信息对应的数据块确定为所述网格容器中的目标子视图;

第二指令接收子单元,用于接收用户通过点击数据块以输入点击控制指令;将所述点击控制指令所点击到的所述数据块确定所述网格容器中的目标子视图;

第三指令接收子单元,用于接收用户通过滑动手势以输入的滑动控制指令;所述滑动控制指令终点所击中的数据块确定为所述网格容器中的目标子视图。

优选地,所述移动控制单元包括:

判断子单元,用于判断所述目标子视图是否完全位于所述网格容器的屏幕显示范围内;

第一移动处理子单元,用于在所述目标子视图完全位于所述网格容器的屏幕显示范围内时,控制所述网格容器相对于所述数据集静止;

第二移动处理子单元,用于在所述目标子视图不完全位于或者完全不位于所述网格容器的屏幕显示范围内时,计算使所述目标子视图移动到网格容器的屏幕显示范围内的横向移动和/或纵向移动的最小距离,根据所述横向移动和/或纵向移动的最小距离控制所述网格容器移动,以使所述目标子视图位于所述网格容器的屏幕显示范围内。

优选地,还包括拖动控制单元,用于接收用户输入的屏幕拖动控制指令,控制所述网格视图移动,并在移动过程中使接收所述屏幕拖动控制指令前焦点所在的子视图位于所述网格视图的屏幕显示范围内。

本发明与现有技术相比具有如下优点:本发明所提供的网格视图控件的移动控制方法中,可根据目标子视图的位置和网格容器的屏幕显示范围位置,控制网格容器相对于数据集移动或静止,以使目标子视图位于网格容器的屏幕显示范围内。可以理解地,为使目标子视图位于网格容器的屏幕显示范围内,需控制网格容器向任意方向移动,使该网格视图控件可实现任意方向移动目的。

本发明所提供的网格视图控件的移动控制系统中,移动控制单元可根据目标子视图的位置和网格容器的屏幕显示范围的位置,控制网格容器相对于数据集移动或静止,以使目标子视图位于网格容器的屏幕显示范围内。可以理解地,为使目标子视图位于网格容器的屏幕显示范围内,需控制网格容器向任意方向移动,使该网格视图控件可实现任意方向移动的目的。

附图说明

下面将结合附图及实施例对本发明作进一步说明,附图中:

图1是本发明实施例1中网格视图控件的移动控制方法的一流程图。

图2是本发明实施例1中网格视图控件的移动控制方法的一局部流程图。

图3是本发明实施例1中数据集与网格容器的一示意图。

图4是本发明实施例1中数据集与网格容器的一示意图。

图5是本发明实施例1中数据集与网格容器的一示意图。

图6是本发明实施例1中数据集与网格容器的一示意图。

图7是本发明实施例1中数据集与网格容器的一示意图。

图8是本发明实施例2中网格视图控件的移动控制系统的一原理框图。

图9是本发明实施例2中网格视图控件的移动控制系统的另一原理框图。

图中:10、初始配置单元;20、位置确定单元;21、视图数量确定子单元;22、起点视图确定子单元;23、视图填充确定子单元;30、指令接收单元;31、第一指令接收子单元;32、第二指令接收子单元;33、第三指令接收子单元;40、移动控制单元;41、判断子单元;42、第一移动处理子单元;43、第二移动处理子单元;50、拖动控制单元。

具体实施方式

为了对本发明的技术特征、目的和效果有更加清楚的理解,现对照附图详细说明本发明的具体实施方式。

实施例1

图1示出本实施例中的网格视图控件的移动控制方法。如图1所示,该网格视图控件的移动控制方法包括:

S10:初始化配置网格容器的宽高和数据集;网格容器的宽高限定网格容器的屏幕显示范围;数据集包括N*M个呈二维数组结构排布的数据块(Block)。如图3-图7所示,本实施例中的数据集(Adapter)放置有5*4个呈二维数组结构排布的数据块,预设每一数据块的宽度为单位宽度,每一数据块的高度为单位高度。通过初始化配置网格容器(GridView)的宽高(即宽度和高度),可限定该网格容器(GridView)的屏幕显示范围,本实施例中的网格容器的宽高为3.5*2.5(如图3-图7中黑色实线框所示)。

S20:根据子视图的宽高和网格容器的宽高,确定网格容器的屏幕显示范围中显示的子视图的数量和每一子视图的位置;其中,每一子视图对应网格容器的屏幕显示范围内的数据块。本实施例中,子视图的宽高分别对应数据块(Block)的宽高,为单位宽度与单位高度。步骤S20具体包括:

S21:根据子视图的宽高和网格容器的宽高分别确定网格容器的屏幕显示范围中横向显示和纵向显示的子视图的数量。由于子视图对应于网格容器的屏幕显示范围内的数据块,本实施例中,每一数据块的宽度为单位宽度,每一数据块的高度为单位高度,若预先配置的网格容器的宽高为3.5*2.5,则说明在该网格容器的屏幕显示范围内横向显示的子视图为3.5个,纵向显示的子视图为2.5个。

S22:依据初始默认焦点所在的子视图为起点子视图。如图3所示,由于在数据集(Adapter)所形成的二维数组结构中,每一数据块(Block)相对于其他数据块(Block)的位置已确定,在网格容器界面初始时,默认焦点为数据集(Adapter)中左上角的第一个数据块1,将数据块1设置为网格容器的屏幕显示范围中的起点子视图。

S23:从起点子视图开始依据横向显示和纵向显示的子视图的数量依次填充,以确定网格容器的屏幕显示范围中显示的每一子视图的位置。本实施例中,没有完全落入网格容器的数据块(如图3中的子视图11)和完全落入网格容器的数据块均作为子视图。相应地,完全没有落入范围网格容器的屏幕显示范围中的数据块不作为子视图,如数据块5。

S30:接收用户输入的移动控制指令,根据移动控制指令获取网格容器中的目标子视图的位置。可以理解地,该移动控制指令可以是通过遥控器按键类型输入的滚动控制指令,也可以是通过点击网格容器所在屏幕中的数据块所输入的点击控制指令,还可以是通过滑动手势以输入的滑动控制指令(即执行touch事件)。

步骤S30可以具体包括:接收用户输入的滚动控制指令,滚动控制指令包括目标子视图对应的数据块在数据集中的坐标信息;将坐标信息对应的数据块确定为网格容器中的目标子视图。可以理解地,滚动控制指令中的坐标信息包括X轴坐标和Y轴坐标,在本实施例中,若滚动控制指令输入的坐标信息为(3,3),则其目标子视图对应的数据块为数据块13,则数据块13为网格容器中的目标子视图。

步骤S30可以具体包括:接收用户通过点击网格容器所在屏幕中的数据块所输入的点击控制指令,当接收用户通过点击数据块以输入点击控制指令;将点击控制指令所点击到的数据块确定网格容器中的目标子视图。如图5所示,用户可点击网格容器的屏幕显示范围中的子视图14,将子视图14确定为网格容器的目标子视图。

步骤S30可以具体包括:接收用户通过滑动手势以输入的滑动控制指令;滑动控制指令终点所击中的数据块确定为网格容器中的目标子视图。如图5所示,用户可将手指在网格容器所在屏幕上滑动以输入滑动控制指令,若用户的滑动手势是从子视图1移动到子视图13,则该滑动控制指令终点所击中的子视图13即为网格容器的目标子视图。

S40:根据目标子视图的位置和网格容器的屏幕显示范围的位置,控制网格容器相对于数据集移动或静止,以使目标子视图位于网格容器的屏幕显示范围中。可以理解地,由于用户输入的移动控制指令所确定的目标子视图可能完全位于网格容器的屏幕显示范围内,也可能完全不位于或不完全位于在网格容器的屏幕显示范围之内,步骤S40具体包括:

S41:判断目标子视图是否完全位于网格容器的屏幕显示范围内。本实施例中,以数据集所在屏幕的位置建立二维坐标系,以左上角为坐标原点;由于数据集中的每一数据块的位置已确定,即目标子视图的位置已确定,若设目标子视图的位置中横向坐标范围为(x1,x2),纵向坐标范围为(y1,y2);相应地,其网格容器的屏幕显示范围的位置中横向坐标范围(X1,X2),纵向坐标范围为(Y1,Y2)。若X1≦x1≦x2≦X2且Y1≦y1≦y2≦Y2;则目标子视图完全位于网格容器的屏幕显示范围内。若x2≦X1或者X2≦x1或者y2≦Y1或者Y2≦y1,则目标子视图完全不位于网格容器的屏幕显示范围内。其中,x2≦X1表示目标子视图位于网格容器的屏幕显示范围的左侧;X2≦x1表示目标子视图位于网格容器的屏幕显示范围的右侧;y2≦Y1表示目标子视图位于网格容器的屏幕显示范围的下侧;若Y2≦y1表示目标子视图位于网格容器的屏幕显示范围的上侧。若不满足完全位于或完全不位于网格容器的屏幕显示范围内的条件,则目标子视图不完全位于网格容器的屏幕显示范围内。

S42:若目标子视图完全位于网格容器的屏幕显示范围内,则控制网格容器相对于数据集静止。可以理解地,若X1≦x1≦x2≦X2,且Y1≦y1≦y2≦Y2,则目标子视图完全位于网格容器的屏幕显示范围内,则控制网格容器相对于数据集静止。

S43:若目标子视图不完全位于或者完全不位于网格容器的屏幕显示范围内,则计算使目标子视图移动到网格容器的屏幕显示范围内的横向移动和/或纵向移动的最小距离,根据横向移动和/或纵向移动的最小距离控制网格容器移动,以使目标子视图位于网格容器的屏幕显示范围内。本实施例中,若x2≦X1,则目标子视图位于网格容器的屏幕显示范围的左侧,其需横向移动的最小距离为X1-x1;若X2≦x1,则目标子视图位于网格容器的屏幕显示范围的右侧,其需横向移动的最小距离为x2-X2;若x1≦X1≦x2≦X2,则目标子视图局部位于网格容器的屏幕显示范围的左侧,其需横向移动的最小距离为X1-x1;若X1≦x1≦X2≦x2,则目标子视图局部位于网格容器的屏幕显示范围的右侧,其需横向移动的最小距离为x2-X2。相应地,若y2≦Y1,则目标子视图位于网格容器的屏幕显示范围的下侧,其需纵向移动的最小距离为Y1-y1;若Y2≦y1,则目标子视图位于网格容器的屏幕显示范围的上侧,其需纵向移动的最小距离为y2-X2;若y1≦Y1≦y2≦Y2,则目标子视图局部位于网格容器的屏幕显示范围的下侧,其需纵向移动的最小距离为Y1-y1;若Y1≦y1≦Y2≦y2,则目标子视图局部位于网格容器的屏幕显示范围的上侧,其需纵向移动的最小距离为y2-X2。

图3示出初始化配置的数据集及对应的网格容器的屏幕显示范围的示意图。在图3中,任意点击子视图2、子视图3、子视图6、子视图7和子视图8,由于上述子视图位于网格容器的屏幕显示范围内,只需将焦点所在的子视图移动到点击到的子视图上,该网格视图控件不会滚动。在图3的基础上,点击子视图13对应的数据块,焦点跳转到子视图13,由于子视图13的下侧局部超出网格容器的屏幕显示范围,计算纵向移动的最小距离;控制网格视图控件向下滚动,以使子视图13位于网格容器的屏幕显示范围内,如图4所示。若在图4的基础上,再点击子视图14使焦点跳转到子视图14,由于子视图14的右侧局部超出网格容器的屏幕显示范围,计算横向移动的最小距离,控制网格视图控件向右滚动,以使子视图14位于网格容器的屏幕显示范围内,如图5所示。若在图5的基础上点击数据集右下角的数据块20,由于数据块20完全在网格容器的屏幕显示范围之外,则需分别计算其横向移动的最小距离和纵向移动的最小距离,控制网格视图控件向下并向右滚动,使其最终效果如图7所示。

S50:接收用户输入的屏幕拖动控制指令,控制网格视图移动,并在移动过程中使接收屏幕拖动控制指令前焦点所在的子视图位于网格视图的屏幕显示范围内。当焦点在子视图14上时,接收用户输入的屏幕拖动控制指令,向左上角方向拖动屏幕,则屏幕显示范围中显示的子视图的位置会发生变化,在屏幕拖动过程中,使其焦点所在的子视图14不超出网格视图的屏幕显示范围,拖动后如图6所示。

可以理解地,对于每个需要显示大量数据的网格容器(ViewGroup)来说,内存控制尤为重要,本实施例中采用AbsListView的实现方式。AbsListView的核心一是数据集(Adapter)和子视图(view)的分离,二是RecycleBin机制。第一点是AbsListView及其子类的最终展示的数据集都是通过adapter管理,而adapter会返回网格容器(ViewGroup)的每个子视图(view),这样可以降低代码耦合性;第二点是子视图(view)的缓存和重复利用。用户对于网格容器(ViewGroup)的移动操作,会导致子视图(view)的位置变化,有新的子视图(view)进入显示范围同样也有旧的子视图(view)移出显示范围,RecycleBin的机制主要是维护一个当前屏幕显示范围内的view数组,并实时将移出去的子视图(view)从父节点中detach,然后放到该类下的另一个数组中缓存,当有新的子视图(view)进入屏幕显示范围内时,优先从缓存中取子视图(view),否则重新inflate一个子视图(view),最终填充数据后attach到网格容器(ViewGroup)显示。当需要实现上下左右滚动且内存稳定时,我们就需要在各个方向上处理子视图(view)的移出和移入,由于各个方向数量的不确定性,该网格容器(ViewGroup)的RecycleBin机制会比GridView复杂一个维度。

本实施例所提供的网格视图控件的移动控制方法中,可根据目标子视图的位置和网格容器的屏幕显示范围的位置,控制网格容器相对于数据集移动或静止,以使目标子视图位于网格容器的屏幕显示范围内;可以理解地,为使目标子视图位于网格容器的屏幕显示范围内,需控制网格容器向任意方向移动,使该网格视图控件可实现任意方向移动目的。

实施例2

图8和图9示出本实施例中的网格视图控件的移动控制系统。如图1所示,该网格视图控件的移动控制系统包括:

初始配置单元10,用于初始化配置网格容器的宽高和数据集;网格容器的宽高限定网格容器的屏幕显示范围;数据集包括N*M个呈二维数组结构排布的数据块(Block)。如图3-图7所示,本实施例中的数据集(Adapter)放置有5*4个呈二维数组结构排布的数据块,预设每一数据块的宽度为单位宽度,每一数据块的高度为单位高度。通过初始化配置网格容器(GridView)的宽高(即宽度和高度),可限定该网格容器(GridView)的屏幕显示范围,本实施例中的网格容器的宽高为3.5*2.5(如图3-图7中黑色实线框所示)。

位置确定单元20,用于根据子视图的宽高和网格容器的宽高,确定网格容器的屏幕显示范围中显示的子视图的数量和每一子视图的位置;其中,每一子视图对应网格容器的屏幕显示范围内的数据块。本实施例中,子视图的宽高分别对应数据块(Block)的宽高,为单位宽度与单位高度。位置确定单元20具体包括:

视图数量确定子单元21,用于根据子视图的宽高和网格容器的宽高分别确定网格容器的屏幕显示范围中横向显示和纵向显示的子视图的数量。由于子视图对应于网格容器的屏幕显示范围内的数据块,本实施例中,每一数据块的宽度为单位宽度,每一数据块的高度为单位高度,若预先配置的网格容器的宽高为3.5*2.5,则说明在该网格容器的屏幕显示范围内横向显示的子视图为3.5个,纵向显示的子视图为2.5个。

起点视图确定子单元22,用于依据初始默认焦点所在的子视图为起点子视图。如图3所示,由于在数据集(Adapter)所形成的二维数组结构中,每一数据块(Block)相对于其他数据块(Block)的位置已确定,在网格容器界面初始时,默认焦点为数据集(Adapter)中左上角的第一个数据块1,将数据块1设置为网格容器的屏幕显示范围中的起点子视图。

视图填充确定子单元23,用于从起点子视图开始依据横向显示和纵向显示的子视图的数量依次填充,以确定网格容器的屏幕显示范围中显示的每一子视图的位置。可以理解地,本实施例中,没有完全落入网格容器的数据块(如图3中的子视图11)和完全落入网格容器的数据块均作为子视图(如图3中的子视图6)。相应地,完全没有落入范围网格容器的屏幕显示范围中的数据块不作为子视图显示,如数据块5。

指令接收单元30,用于接收用户输入的移动控制指令,根据移动控制指令获取网格容器中的目标子视图的位置。可以理解地,该移动控制指令可以是通过遥控器按键类型输入的滚动控制指令,也可以是通过点击网格容器所在屏幕中的数据块所输入的点击控制指令,还可以是通过滑动手势以输入的滑动控制指令(即执行touch事件)。

指令接收单元30可以包括第一指令接收子单元31,用于接收用户输入的滚动控制指令,滚动控制指令包括目标子视图对应的数据块在数据集中的坐标信息;将坐标信息对应的数据块确定为网格容器中的目标子视图。可以理解地,滚动控制指令中的坐标信息包括X轴坐标和Y轴坐标,在本实施例中,若滚动控制指令输入的坐标信息为(3,3),则其目标子视图对应的数据块为数据块13,则数据块13为网格容器中的目标子视图。

指令接收单元30可以包括第二指令接收子单元32,用于接收用户通过点击网格容器所在屏幕中的数据块所输入的点击控制指令,当接收用户通过点击数据块以输入点击控制指令;将点击控制指令所点击到的数据块确定网格容器中的目标子视图。如图5所示,用户可点击网格容器的屏幕显示范围中的子视图14,将子视图14确定为网格容器的目标子视图。

指令接收单元30可以包括第三指令接收子单元33,用于接收用户通过滑动手势以输入的滑动控制指令;滑动控制指令终点所击中的数据块确定为网格容器中的目标子视图。如图5所示,用户可将手指在网格容器所在屏幕上滑动以输入滑动控制指令,若用户的滑动手势是从子视图1移动到子视图13,则该滑动控制指令终点所击中的子视图13即为网格容器的目标子视图。

移动控制单元40,用于根据目标子视图的位置和网格容器的屏幕显示范围的位置,控制网格容器相对于数据集移动或静止,以使目标子视图位于网格容器的屏幕显示范围中。可以理解地,由于用户输入的移动控制指令所确定的目标子视图可能完全位于网格容器的屏幕显示范围内,也可能完全不位于或不完全位于网格容器的屏幕显示范围之内。移动控制单元40具体包括判断子单元41、第一移动处理子单元42和第二移动处理子单元43。

判断子单元41,用于判断目标子视图是否完全位于网格容器的屏幕显示范围内。本实施例中,以数据集所在屏幕的位置建立二维坐标系,以左上角为坐标原点;由于数据集中的每一数据块的位置已确定,即目标子视图的位置已确定,若设目标子视图的位置中横向坐标范围为(x1,x2),纵向坐标范围为(y1,y2);相应地,其网格容器的屏幕显示范围的位置中横向坐标范围(X1,X2),纵向坐标范围为(Y1,Y2)。若X1≦x1≦x2≦X2且Y1≦y1≦y2≦Y2;则目标子视图完全位于网格容器的屏幕显示范围内。若x2≦X1或者X2≦x1或者y2≦Y1或者Y2≦y1,则目标子视图完全不位于网格容器的屏幕显示范围内。其中,x2≦X1表示目标子视图位于网格容器的屏幕显示范围的左侧;X2≦x1表示目标子视图位于网格容器的屏幕显示范围的右侧;y2≦Y1表示目标子视图位于网格容器的屏幕显示范围的下侧;若Y2≦y1表示目标子视图位于网格容器的屏幕显示范围的上侧。若不满足完全位于或完全不位于网格容器的屏幕显示范围内的条件,则目标子视图不完全位于网格容器的屏幕显示范围内。。

第一移动处理子单元42,用于在目标子视图完全位于网格容器的屏幕显示范围内时,控制网格容器相对于数据集静止。可以理解地,若X1≦x1≦x2≦X2,且Y1≦y1≦y2≦Y2,则目标子视图完全位于网格容器的屏幕显示范围内,则控制网格容器相对于数据集静止。

第二移动处理子单元43,用于在目标子视图不完全位于或者完全不位于网格容器的屏幕显示范围内时,计算使目标子视图移动到网格容器的屏幕显示范围内的横向移动和/或纵向移动的最小距离,根据横向移动和/或纵向移动的最小距离控制网格容器移动,以使目标子视图位于网格容器的屏幕显示范围内。本实施例中,若x2≦X1,则目标子视图位于网格容器的屏幕显示范围的左侧,其需横向移动的最小距离为X1-x1;若X2≦x1,则目标子视图位于网格容器的屏幕显示范围的右侧,其需横向移动的最小距离为x2-X2;若x1≦X1≦x2≦X2,则目标子视图局部位于网格容器的屏幕显示范围的左侧,其需横向移动的最小距离为X1-x1;若X1≦x1≦X2≦x2,则目标子视图局部位于网格容器的屏幕显示范围的右侧,其需横向移动的最小距离为x2-X2。相应地,若y2≦Y1,则目标子视图位于网格容器的屏幕显示范围的下侧,其需纵向移动的最小距离为Y1-y1;若Y2≦y1,则目标子视图位于网格容器的屏幕显示范围的上侧,其需纵向移动的最小距离为y2-X2;若y1≦Y1≦y2≦Y2,则目标子视图局部位于网格容器的屏幕显示范围的下侧,其需纵向移动的最小距离为Y1-y1;若Y1≦y1≦Y2≦y2,则目标子视图局部位于网格容器的屏幕显示范围的上侧,其需纵向移动的最小距离为y2-X2。

图3示出初始化配置的数据集及对应的网格容器的屏幕显示范围的示意图。在图3中,任意点击子视图2、子视图3、子视图6、子视图7和子视图8,由于上述子视图位于网格容器的屏幕显示范围内,只需将焦点所在的子视图移动到点击到的子视图上,该网格视图控件不会滚动。在图3的基础上,点击子视图13对应的数据块,焦点跳转到子视图13,由于子视图13的下侧局部超出网格容器的屏幕显示范围,计算纵向移动的最小距离;控制网格视图控件向下滚动,以使子视图13位于网格容器的屏幕显示范围内,如图4所示。若在图4的基础上,再点击子视图14使焦点跳转到子视图14,由于子视图14的右侧局部超出网格容器的屏幕显示范围,计算横向移动的最小距离,控制网格视图控件向右滚动,以使子视图14位于网格容器的屏幕显示范围内,如图5所示。若在图5的基础上点击数据集右下角的数据块20,由于数据块20完全在网格容器的屏幕显示范围之外,则需分别计算其横向移动的最小距离和纵向移动的最小距离,控制网格视图控件向下并向右滚动,使其最终效果如图7所示。

拖动控制单元50,用于接收用户输入的屏幕拖动控制指令,控制网格视图移动,并在移动过程中使接收屏幕拖动控制指令前焦点所在的子视图位于网格视图的屏幕显示范围内。当焦点在子视图14上时,接收用户输入的屏幕拖动控制指令,向左上角方向拖动屏幕,则屏幕显示范围中显示的子视图的位置会发生变化,在屏幕拖动过程中,使其焦点所在的子视图14不超出网格视图的屏幕显示范围,拖动后如图6所示。

可以理解地,对于每个需要显示大量数据的网格容器(ViewGroup)来说,内存控制尤为重要,本实施例中采用AbsListView的实现方式。AbsListView的核心一是数据集(Adapter)和子视图(view)的分离,二是RecycleBin机制。第一点是AbsListView及其子类的最终展示的数据集都是通过adapter管理,而adapter会返回网格容器(ViewGroup)的每个子视图(view),这样可以降低代码耦合性;第二点是子视图(view)的缓存和重复利用。用户对于网格容器(ViewGroup)的移动操作,会导致子视图(view)的位置变化,有新的子视图(view)进入显示范围同样也有旧的子视图(view)移出显示范围,RecycleBin的机制主要是维护一个当前屏幕显示范围内的view数组,并实时将移出去的子视图(view)从父节点中detach,然后放到该类下的另一个数组中缓存,当有新的子视图(view)进入屏幕显示范围内时,优先从缓存中取子视图(view),否则重新inflate一个子视图(view),最终填充数据后attach到网格容器(ViewGroup)显示。当需要实现上下左右滚动且内存稳定时,我们就需要在各个方向上处理子视图(view)的移出和移入,由于各个方向数量的不确定性,该网格容器(ViewGroup)的RecycleBin机制会比GridView复杂一个维度。

本实施例所提供的网格视图控件的移动控制系统中,移动控制单元40可根据目标子视图的位置和网格容器的屏幕显示范围的位置,控制网格容器相对于数据集移动或静止,以使目标子视图位于网格容器的屏幕显示范围内;可以理解地,为使目标子视图位于网格容器的屏幕显示范围内,需控制网格容器向任意方向移动,使该网格视图控件可实现任意方向移动目的。

本发明是通过几个具体实施例进行说明的,本领域技术人员应当明白,在不脱离本发明范围的情况下,还可以对本发明进行各种变换和等同替代。另外,针对特定情形或具体情况,可以对本发明做各种修改,而不脱离本发明的范围。因此,本发明不局限于所公开的具体实施例,而应当包括落入本发明权利要求范围内的全部实施方式。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1