分层定位事件分派的制作方法

文档序号:15307302发布日期:2018-08-31 21:12阅读:121来源:国知局

本公开大体涉及图形用户界面,并且更具体涉及在图形用户界面中接收和处理触摸事件和其它定位事件。



背景技术:

图形用户界面(gui)使得能够使用多个窗口或视图,通过所述多个窗口或视图可以向用户显示信息或者可以从用户接收输入。通常,此输入是通过使用触摸屏、触控板、鼠标、或其它位置输入组件来提供的。在常规系统中,用户经由位置输入组件与gui的交互采取一个或多个定位事件的形式,每个定位事件具有相对于系统的显示空间的二维位置。对于这些定位事件中的每一个,底层gui框架操作来将输入事件分派(dispatch)给意图视图以供处理。通常,gui实现当前显示的视图的视图层次(也常常被称为“视图树”),并且表示这些视图之间的父子关系。因此,输入事件的分派通常涉及往视图层次向下分派输入事件。在许多实例下,随着输入事件遍历该视图层次,定位事件可以被意图视图的父视图拦截或者修改,诸如以虑及触摸“倾溢(slop)”或在不同类型的手势输入之间进行区分。

在由此要求每个子视图被完全包含在父视图的有界框内的gui配置中,往视图层次向下分派视图事件是相对直接的,因为每个父视图基于定位事件的地点与有界框重叠或者在父视图对象的界限内而接收父视图,并且父视图仅需要将输入事件传递给与定位事件地点重叠的任何一个子视图对象。然而,出于美学原因或其它设计原因可能期望提供子视图对象的定位不受其父视图对象的有界框限制的视图布局。在这样的实例下,意图用于特定视图的输入事件的地点可以不落在该特定视图的父视图对象的边界内。将视图对象约束成仅接受视图对象的有界框内的定位事件的常规的基于空间的分层事件分派过程无法在这样的实例下准确地分派和处理定位事件。

附图说明

通过参考附图,本公开可以被更好地理解,并且其许多特征和优点对于本领域的技术人员而言变得显而易见。在不同的附图中使用相同的附图标记表示类似或相同的项目。

图1是图示依照本公开的至少一个实施例的,在利用无约束gui的电子设备中分派定位事件的过程的图。

图2是图示依照本公开的至少一个实施例的,图1的电子设备的示例硬件配置的框图。

图3是图示依照本公开的至少一个实施例的,用于无约束gui的定位事件分派的方法的流程图。

图4是图示依照本公开的至少一个实施例的,用于确定表示布局的视图的定位的四叉树数据结构的方法的图。

图5是图示依照本公开的至少一个实施例的,用于确定表示布局的视图的定位的视图映射数据结构的方法的图。

图6是图示依照本公开的至少一个实施例的,用于确定表示布局的视图的列表数据结构的方法的图。

具体实施方式

图1至图6图示用于处理“无约束”gui(即,不将子视图的位置约束到父视图的有界框或其它边框的gui)中的定位输入事件的示例设备和技术。电子设备提供具有视图的布局的gui的显示。用户可以利用触摸屏、触控板、鼠标或其它位置输入组件来以相对于当前布局中的视图的定位输入事件(在下文中,为了简洁为“定位事件”)的形式经由gui提供输入。电子设备以表示当前布局中的视图及其相对于电子设备的显示器的布局或显示空间的位置的数据结构的形式维护视图显示空间注册表。响应于定位事件,电子设备使用视图显示空间注册表来识别定位事件很可能意图针对的视图—此视图在本文中被标识为“终端视图”。电子设备然后识别终端视图在当前布局的视图层次中的地点并且从终端视图逐步发展视图层次以从该视图层次构建表示从顶部父视图向下到终端视图的视图链的祖先链。电子设备然后可以顺序地分派祖先链中的定位事件,直到祖先链中的视图消费或者修改定位事件或者定位事件最终被终端视图拒绝为止。作为此分派过程的一部分,可以禁用或者绕过基于定位事件的地点对定位事件的过滤,从而允许祖先链中的每个视图考虑定位事件,而不管定位事件的地点与非终端视图的有界框或其它界限之间的关系如何。

通过利用视图显示空间注册表来识别独立于任何父视图的终端视图、从终端视图向上构造祖先链、并且往此祖先链向下连续地分派定位事件,祖先视图可以在不必识别定位输入将被分派给的子视图的情况下考虑定位输入。因此,子视图的位置与父视图的边界之间的关系与定位事件的分派没有密切关系,这允许子视图被部分地或完全地定位在父视图的界限外部,同时仍然许可定位事件的预期分层处理。即,随着每个祖先视图被提供消费、延迟或者以其它方式修改定位事件的机会时,诸如滚动、轻扫手势、多点触摸手势等的较大场境(context)用户输入的处理继续被恰当地处置。

为了易于参考,在下面参考如由谷歌公司(googleinc)所发布的安卓(android)操作系统(os)框架(在下文中,“安卓框架”)及其对应术语或者在它们的场境中描述各个方面的示例和实施方式。然而,这些参考文献仅是示例性的而不旨在为限制性的。可以使用本文中所提供的指南来在其它os框架或用户界面(ui)框架中类似地实现所标识的方面。

图1图示依照至少一个实施例的,用于针对不将子视图的位置约束到父视图的有界框或其它边界的gui(在下文中,“受约束gui”)来分派定位事件的示例过程100。过程100由具有显示器104和一个或多个位置用户输入组件(在图1中未示出)(诸如触摸屏、触控板、鼠标等)的电子设备102执行。电子设备102可以包括例如支持计算的蜂窝电话、平板计算机、支持计算的手表或其它支持计算的可穿戴设备、笔记本计算机、台式计算机、游戏控制台、远程控制器、网络器具、服务器计算机、家庭自动化控制器、汽车显示接口、支持计算的医疗设备等。

如所描绘的,电子设备102经由显示器104向用户提供gui106。gui106包括当前显示在gui中的视图(诸如视图110、112、114)的布局108。对于此示例,视图110、112是窗口视图而视图114是按钮视图。另外,视图114是视图112的子视图,所述视图112进而是视图110的子视图,并且因此视图110是视图112的父,所述视图112进而是视图114的父。如也由图1所示,gui106是无约束gui,因为gui106的视图可以被至少部分地或完全地定位在其父视图的边界外部。为了图示,视图114完全位于视图112的边界外部,并且视图112同样完全位于视图110的边界外部。由于父视图与子视图之间的这种无约束关系,常规的基于有界框的分层分派过程将很可能无法恰当地处理定位事件。为了图示,如果用户将通过在与视图112的位置重叠的位置处发起与触摸屏(未示出)接触来发起触摸手势,则此地点在视图110的边界外部,并且因此当与初始触摸屏接触相对应的定位事件在常规的基于空间的分层分派过程中被往视图层次向下分派时,视图110将拒绝定位事件,因为定位事件的地点在视图110的边界外部。

为了防止对定位事件的这样的基于边界的拒绝并且因此使得gui106能够作为无约束gui有效地操作,电子设备102采用无约束分层分派技术(过程100),所述无约束分层分派技术操作来以不依靠基于有界框的过滤的方式分派定位事件,同时继续使得能实现分层事件分派以供处理较大场境用户输入事件。为此,电子设备102维护视图显示空间注册表116,所述视图显示空间注册表116存储表示当前视图布局108的视图中的一些或全部视图及其相对于布局108或相对于显示空间的位置的信息。视图显示空间注册表116可以包括各种数据结构中的任一种或数据结构的组合。为了图示,如在下面参考图4-6更详细地描述的,视图显示空间注册表116可以包括将关联视图的位置映射或者以其它方式引用到显示器104的显示空间的四叉树数据结构、视图的列表、或基于阵列的数据结构。在一些实施例中,视图显示空间注册表116表示布局108中的所有视图。然而,当一些视图可能未被配置成接收用户输入或者可以更特别地可能未被配置成接收基于位置的输入时,电子设备102可以过滤掉这样的视图,使得仅被配置成接收用户输入或更具体地基于位置的输入的视图被表示在视图显示空间注册表116中。

响应于用户操纵位置输入组件,gui106发信号通知初始定位事件118,其包括与在显示器104的显示空间中发生了定位事件118的二维(2d)地点相对应的2d地点标识符(被表示为“(x,y)”)。例如,此地点标识符可标识在显示空间中用户首先接触触摸屏的位置、当鼠标按钮或触控板按钮被接涉(engage)时显示空间中光标的位置等。对于以下示例,假定了在显示空间中与视图114的按钮微件的地点重叠的地点(在图1中用接触点120的同心环表示)处发生了此定位事件。

定位事件118触发电子设备102以执行对视图显示空间注册表116的查找或者以其它方式访问视图显示空间注册表116以识别用户很可能意图作为位置事件118的目标或接受者的视图。此视图在本文中被标识为定位事件118的“终端”视图122。如在下面更详细地描述的,识别终端视图122的过程一般涉及识别当前布局108的具有与定位事件118的地点(x,y)重叠的有界框的那些视图。应了解的是,可以存在在布局108中重叠的多个视图,并且因此可以存在在地点(x,y)处重叠的多个视图。在这样的实例下,电子设备102基于一个或多个选择准则从多个视图中选择终端视图122。例如,因为布局108中的“在顶部”的视图很可能是被意图接收用户输入的视图,所以电子设备102可以利用每个视图的z编号或绘制次序来选择恰当的视图。作为另一示例,如果重叠视图中的一个是当前“关注中(infocus)”视图,则这是用户意图将“关注中”视图作为用户输入的意图视图的强烈暗示。对于图1的示例,在与视图114的按钮微件重叠的地点(x,y)处发生定位事件118,并且因此视图114被假定为终端视图122。

尽管电子设备102使用视图显示空间注册表116来识别终端视图122并且因此能将定位事件118直接地分派给终端视图122,然而这将绕过定位事件向终端视图122的祖先视图的分层分派并且因此阻碍定位事件118的任何较大场境处理,包括对多点触摸手势的检测、针对触摸倾溢的补偿、类似类型的手势之间的辨别(例如,触摸至拖曳对照触摸至按压手势)。因此,为了在无约束gui106中使得能实现此分层分派,电子设备102也识别作为终端视图122的祖先的那些视图。支持gui106的底层操作系统(os)框架或用户界面(ui)框架通常维护视图树124(或视图层次),其既识别当前布局108中存在的视图又识别这些视图之间的父-子关系。

因此,为了识别应当有机会在定位事件118被提供给终端视图122之前考虑该定位事件118的那些视图,电子设备102识别视图树124内的终端视图122,然后按顺序排好视图树124以识别终端视图122的每个祖先视图(假定终端视图122具有至少一个祖先视图)。电子设备102构造祖先链126,所述祖先链126表示终端视图122的一个或多个祖先视图及其如通过由电子设备102按顺序排好视图树124所确定的分层布置。在图1的示例中,视图112是视图114的父(作为终端视图122)并且视图110是视图112的父,并且因此得到的祖先链126将是:视图110→视图112→视图114。

在祖先链126被如此构造或者以其它方式识别的情况下,电子设备102然后分层次将定位事件118顺序地分派给祖先链126中的视图。每个视图然后可以基于视图的配置或编程拒绝、消费或者修改所分派的定位事件118。在视图已拒绝或修改定位事件118的情况下,电子设备102然后可以将已拒绝/修改的定位事件118分派给祖先链126中的下一个视图。因此,在图1的示例中,定位事件118被首先分派给视图110(分派事件128)。在视图110未消费定位事件118的情况下,定位事件118(或其如由视图110修改的版本)可以被接下来分派给视图112(分派事件130)。在视图112未消费定位事件118的情况下,定位事件118(或其如由视图112修改的版本)可以被接下来分派给视图114(分派事件132)。作为终端视图122的视图114然后可以选择基于视图114的配置或编程来消费或者拒绝定位事件118。

如上面所指出的,支持gui106的ui框架可以默认将视图配置成拒绝在视图的边界外部的地点处发生的任何定位事件。在此约束下,在视图110的界限外部的地点(x,y)处发生定位事件118的图1的示例中,视图110将以其它方式操作来自动地拒绝定位事件118。这会阻碍否则可能由视图110提供的较大场境定位事件处理,诸如倾溢补偿或滚动。因此,在定位事件的此默认有界框过滤的实施方式中,电子设备102可以操作来绕过或禁用此过滤,使得即使在父视图的有界框外部的地点处可能已发生了定位事件118,祖先链126中的父视图也考虑它。可以以各种方式中的任一种实现对空间过滤的这种绕过/禁用。例如,定位事件118的分派可以通过与由gui106采用的默认分层分派过程分离的框架而发生。作为另一示例,可以通过在使视图实例化时设置参数来覆写过滤,所述参数通过暂时地覆写所有有界框过滤的函数调用、通过使用不使用有界框过滤的特殊视图类等来控制是否将对于视图的实例应用有界框过滤。

图2图示依照本公开的至少一个实施例的电子设备102的示例硬件配置200。在所描绘的示例中,电子设备102包括经由一个或多个总线210或其它组件互连来互连的一个或多个处理器(诸如中央处理单元(cpu)202和图形处理单元(gpu)204)、一个或多个存储组件(诸如系统存储器206或存储驱动器(未示出))、用户输入组件的集合208和显示器104。硬件配置200还可以包括已经为了清楚而被从图2中省略的各种其它组件,诸如一个或多个无线接口、传感器等。用户输入组件的集合208包括可以由用户操纵来执行ui动作的一个或多个用户输入组件,诸如触摸屏212、鼠标214、触控板218、键盘218、麦克风220等。某些用户输入组件(诸如触摸屏212、鼠标214和触控板218)可以接收具有相对于显示器104的显示空间的位置方面的输入,并且因此是位置输入组件。

在操作中,处理器202、204中的一个或这两者执行从系统存储器206或其它存储组件访问的软件应用222。在执行期间,软件应用222操纵电子设备102的处理器202、204和其它组件以经由显示器104显示gui106(图1),以接收经由用户输入组件的集合208中的一个或多个相对于gui106的用户输入,并且以相应地对用户输入做出响应。为了促进以这种方式操作gui106,电子设备102可以提供为软件应用222和gui106提供较低级处理和处置框架的用户界面(ui)框架224。为此,ui框架224可以包括例如定位事件处理程序组件226、视图树管理组件228、注册表管理组件230和视图渲染组件232。在一些实施例中,ui框架224是电子设备102的操作系统(os)的一部分,并且因此ui框架224以及组件226、228、230、232作为处理器202、204中的一个或其二者和可执行指令的一个或多个集合被实现,所述可执行指令由处理器202、204中的一个或其二者执行以提供本文中所描述的功能性。在其它实施例中,组件226、228、230、232中的一些或全部可以用硬编码逻辑——诸如用专用集成电路(asic)、用可编程逻辑——诸如用现场可编程门阵列(fpga)或可编程逻辑器件(pld)、或其组合加以实现。

视图渲染组件232操作来渲染表示当前布局108中的gui106的显示帧,并且这些显示帧然后被输出到显示器104以供显示。对于此渲染过程,视图渲染组件232引用来自软件应用222的布局信息234,其中布局信息234指定布局108中的当前视图以及其相关显示参数。作为此渲染过程的一部分,视图渲染组件232识别当前布局中的视图的z编号或绘制次序并且使用该z编号/绘制次序依照其指定的深度来渲染视图,这可以取决于视图的深度和与其它视图重叠的程度在得到的显示帧中导致一个或多个视图的部分或完全遮挡。

视图树管理组件228操作来构造并更新当前布局108的视图树124(例如作为一个或多个数据结构存储在系统存储器206中)。为了图示,安卓框架提供与视图有关的两个类:在显示器104上占据(通常为矩形)区域并且负责绘制和事件处置的“view”对象;以及作为可包含其它视图的特殊视图的“viewgroup”对象。使用这种分类方案,ui可以将叶子视图(leafchildview)指命为“view”对象(例如,具有“按钮”微件的视图114),并且将父视图指命为“viewgroup”对象(例如,视图110、110)。因此,当软件应用222正在执行时,底层安卓os(ui框架224的一个实施例)可以处理显示器上的当前布局108,识别当前布局108中的实例化view对象和viewgroup对象及其父/子关系,并且基于此识别的信息来构建视图树124。

注册表管理组件230操作来构造并维护视图显示空间注册表116,所述视图显示空间注册表116可以作为一个或多个数据结构被存储在电子设备102的系统存储器206或其它存储组件中。注册表管理组件230可以利用视图树124来识别当前布局108中的视图,并且在一些实施方式中识别视图的位置,以及相应地更新视图显示空间注册表116。视图渲染组件232可以利用渲染树来识别要渲染的视图,并且因此注册表管理组件230替选地可以在识别当前布局108中的视图及其相对于显示空间的位置时使用此渲染树。特定视图在视图显示空间注册表116中的表示可以基于如由软件应用222提供的和该视图有关的信息(此信息在本文中被标识为“视图行为/参数信息236”)。为了图示,视图行为/参数信息236可以标识视图的大小和位置参数,并且因此指示视图在显示空间坐标中的位置,这进而可以以某种形式反映在视图显示空间注册表116中。作为另一示例,视图行为/参数信息236可以指示视图的类别或类型,并且据此注册表管理组件230可以确定视图是否被配置成接受基于位置的用户输入。如果否,则注册表管理组件230然后可以过滤掉视图以便防止其不必要地包括在视图显示空间注册表116中。

定位事件处理程序组件226操作来检测来自用户对位置用户输入组件的操纵的定位事件,然后使用本文中所描述的技术来分层次地在当前布局108的视图当中分派这些定位事件。为此,定位事件处理程序组件226在识别意图供定位事件使用的终端视图、遍历视图树124以构造祖先链126、以及在祖先链126的一个或多个视图内顺序地分派定位事件时与ui框架224的其它组件228、230、232协调。

可以参考图3更充分地理解电子设备102的硬件配置200的组件226、228、230、232和其它组件的操作,图3图示依照至少一个实施例的用于无约束gui中的分层分派的方法300。尽管在图2的硬件配置200的示例场境中对方法300进行描述,然而应当了解的是,可以使用本文中所提供的指南来在电子设备的其它硬件配置中类似地采用方法300。另外,虽然方法300以特定顺序图示事件,但是应当了解的是,可以酌情以另一顺序执行这些事件,或者可以省略一些事件。方法300反映并行地操作的两个过程:更新gui106的布局108的过程,如通过流程302所表示的;以及基于当前布局108的对定位事件的分层分派的过程,如通过流程304所表示的。

首先转向流程302,在框306处ui框架224监视触发对gui106的布局108的更新的用户输入或其它激励。例如,用户可以利用用户输入组件来将视图“拖拽”到新地点,关闭视图,打开视图,或者以其它方式提供修改视图的外观或存在的输入。替选地,在软件应用222的执行期间或者在os的执行期间发生的底层过程可以触发一个或多个视图的位置、存在或外观的变化。在这种事件中,ui框架224相应地重建或者以其它方式修改布局108,并且视图渲染组件232渲染表示当前布局108的显示帧。另外,视图树管理组件228酌情更新视图树124以反映当前布局108中的视图的视图层次。进一步响应于布局108中的这种变化,在框308处注册表管理组件230更新视图显示空间注册表116以反映当前布局108中的视图,并且在一些实施方式中,反映这些视图相对于显示空间坐标系的当前位置。

流程304在框310处开始,其中定位事件处理程序组件226监视对发信号通知手势或其它位置用户输入的开始的位置用户输入组件的用户操纵。为了图示,在检测到对触摸屏212的指示触摸手势的开始的初始触摸事件时,ui框架224的基于安卓的实施方式将使“motionevent”类的触摸事件实例化并且向此初始触摸事件指派动作代码action_down以及包括触摸事件相对于触摸屏212的x和y坐标的一组轴值连同基础指针值(例如,0)。对于直到用户已完成或者取消触摸手势为止的每个后续触摸事件,ui框架224将使另一触摸事件实例化,指派恰当的动作代码(例如,actionmove)和对应的一组轴值以及增量的指针值。手势的最后触摸事件将被指派动作代码action_up(在用户取消手势动作的情况下为action_canceled)。可以对于基于鼠标的手势或基于触控板的手势采取类似的动作。

在ui框架224发信号通知初始定位事件(例如,motionevent,其中动作代码=action_down)的情况下,在框312处注册表管理组件230查询视图显示空间注册表116以识别很可能意图用于接收位置用户输入的终端视图(例如,终端视图122)。在一些实施例中,视图显示空间注册表116基于视图相对于显示空间的位置来注册视图或者以其它方式包括对视图的位置的引用,并且因此注册表管理组件230可以使用在框310处检测到的初始定位事件的x、y坐标来通过应用命中测试来识别终端视图。为了图示,如在下面参考图4所描述的,可以在视图显示空间注册表116中基于显示空间的四叉树表示和视图在其中的位置维护当前布局108的视图,并且因此命中测试可以采取基于x、y坐标的四叉树的遍历的形式。如在下面参考图5所描述的,视图显示空间注册表116可以采取作为2d条目阵列而构建的视图映射的形式,每个条目与显示空间的一个或多个像素的对应像素块相关联并且存储被定位在对应像素块中的任何视图的指示。在这种情况下,命中测试可以采取如下形式:基于输入定位事件的x、y坐标为恰当的条目编索引,识别条目中表示的视图(若有的话),以及如果存在如此表示的多于一个视图,则基于例如视图的z编号或绘制次序来从多个表示的视图中选择终端视图。替选地,如在下面参考图6所描述的,视图显示空间注册表116可以采取视图的列表及其相对于显示空间的位置的表示的形式,命中测试可以采取这样的形式:基于所罗列视图的位置的表示和x、y坐标的比较的沿循该列表的某种形式的搜索。

在终端视图被识别的情况下,在框314处视图树管理组件228在视图树124内定位终端视图,然后向上遍历视图树124以识别终端视图的祖先链(例如,祖先链126)。在安卓框架中,可以通过针对该视图调用view#getparent()函数来调取给定视图的父视图。因此,视图树管理组件228可以通过如下步骤来向上遍历视图树124:针对终端视图调用getparent()以识别终端视图的直接父视图,然后针对此父视图调用getparent()以识别在下一个更高层级的父视图,依此类推直到对getparent()的调用返回空值为止,从而指示当前视图是终端视图的根父视图。当每个视图被识别为祖先时,视图树管理组件228将视图的标识符(例如,指派给安卓框架中的视图的标识符)添加到祖先链。祖先链因此可以被构造为例如具有前向指针和后向指针的链表,从而允许定位事件处理程序组件226从根视图(参考当前视图布局)遍历到终端视图。

在祖先链被构造的情况下,定位事件处理程序组件226发起沿循祖先链的初始定位事件的分层分派。在框316处,定位事件处理程序组件226最初将当前视图设置为祖先链中的根视图的标识符。在框318处,定位事件处理程序组件226将初始定位事件分派给当前视图,所述当前视图在框318的第一次迭代中是祖先链的根视图。如上面所说明的,ui框架224可以默认对于分派事件采用基于有界框的过滤,由此视图可以被配置成自动地拒绝具有在视图的有界框外部的地点的任何定位事件。因此,在框320处ui框架224可以采取动作来禁用或者绕过此过滤。例如,在安卓框架中,函数调用view#istransformedtouchpointinview()返回指示用函数调用供应的地点(x,y)是否在对应视图的有界框或其它界限内的布尔值,并且定位事件的默认过滤的基础基于此函数调用是返回true值还是false值。因此,对于在构建时间或编译时间被识别为不在空间上约束其子视图的视图的视图,此函数调用的编译或此函数调用的库可以针对这样的视图被配置成或则被禁用或则总是返回true值,从而覆写此函数调用的默认操作。替选地,对于这样的视图,可以在软件应用222的开发期间或者在构建/编译期间手动地替换使用函数调用view#istransformedtouchpointinview()的空间检查以包括对该时间已知的单个子视图的定向分派。

在框322处,初始定位事件已被分派给的当前视图处理初始定位事件以确定该定位事件是否应当被当前视图拒绝、消费或者修改。在当前视图是终端视图的祖先的情况下,此处理可包括针对较高层级手势场境评来估初始定位事件,诸如为了处置触摸事件倾溢或滚动事件。在当前视图选择消费或者修改初始定位事件的情况下,在框324处初始定位事件被当前视图消费或者修改。另外,在定位事件被修改的情况下,经修改的定位事件然后被以与未修改的初始定位事件原本将在祖先链向下分派的相同方式在祖先链向下分派。另外,在安卓框架和其它ui框架中,在视图已选择消费或者修改表示用户输入手势的定位事件的序列中的定位事件之后,该序列中的所有后续定位事件默认被该视图拦截或者直接分派给该视图。在保持与此配置一致时,在至少一个实施例中,如果当前视图消费或者修改初始定位事件,则所有后续定位事件均被当前视图分派或拦截直到手势完成或者被取消为止。

返回框322,在当前视图拒绝初始定位事件的情况下,分层分派过程继续进行到祖先链中的下一个视图。因此,为了验证在祖先链中存在下一个视图,在框326处定位事件处理程序组件226检查当前视图是否是祖先链的终端视图。如果不是,则在框328处定位事件处理程序组件226将当前视图设置为祖先链的下一个视图,并且针对作为当前视图的此下一个视图重复框318、320、322、324和326的过程。否则,如果拒绝了初始定位事件的当前视图是终端视图,则ui框架224可以断定用户输入是虚假的或有错误的,并且因此在框330处终止对初始定位事件的任何进一步处理。

如上面所说明的,视图显示空间注册表116作为用于存储识别当前布局108的视图的信息的一个或多个数据结构被实现,并且此信息用于识别与定位事件的位置相关联的终端视图。尽管视图显示空间注册表116可以依照本文中所提供的指南来采取各种形式中的任一种,然而图4-6图示用于为视图显示空间注册表116构造并维护某些示例数据结构的方法。

图4描绘用于以四叉树数据结构的形式构造并维护视图显示空间注册表116的示例方法400。方法400在框402处发起,其中注册表管理组件230利用来自当前布局108的信息来识别当前布局中的视图并且使用针对所识别的视图而获得的位置信息来确定显示空间内的位置。

在视图及其相对于显示空间的位置被如此识别的情况下,在框404处注册表管理组件230构造表示视图及其识别的位置的四叉树数据结构406。在此过程中,四叉树数据结构406的顶部节点408表示显示空间。显示空间在空间上被分成四个象限,所述四个象限由紧接在节点408之下的四个节点来表示。具有定位在其中的视图的任何象限自身然后被分割成四个子象限,每个子象限由对应节点表示。针对四叉树的指定数目的层级递归地重复此过程,或者直到不需要子象限的进一步划分为止。在四叉树数据结构406中,所有终端叶节点或则包含与显示空间的相应子象限重叠的一个或多个视图的条目,或则是空的或空叶节点。因为布局108可以容纳不同深度的视图,并且因此一些视图可以部分地或完全地遮挡布局108中的其它视图,所以可以存在与给定子象限重叠的多个视图,并且因此该子象限的终端叶节点可以具有多个条目,存在于该子象限中的每个视图各有一个条目。这些条目可以存储对应视图的标识符(id)以及视图的深度的标识符,诸如视图的z值或绘制次序(例如,如在四叉树数据结构406中由编号“0”、“1”和“2”所表示的)。

因此,为了对四叉树数据结构406执行命中测试,注册表管理组件230遍历四叉树以找到表示包含定位事件的(x,y)地点的子象限的终端叶节点。在此终端叶节点是空节点的情况下,命中测试失败并且ui框架224停止定位事件的处理。在终端叶节点处存在单个条目的情况下,注册表管理组件230返回存储在此单个条目处的视图id作为与定位事件的地点重叠的终端视图。在定位事件地点处存在表示多个重叠视图的多个条目的情况下,注册表管理组件230可以选择例如具有最高z值的视图(即,最深视图)作为终端视图,并且因此返回此视图的视图id作为终端视图。

图5描绘依照一些实施例的用于将视图显示空间注册表116作为条目的基于像素块的阵列来构造并维护的方法500。如上面所指出的,视图渲染组件232可以生成表示当前布局108的显示视图的一个或多个显示帧,其中这些显示帧表示当前布局108的显示空间视图,包括被较浅(较低z)视图重叠的较深(较高z)视图。视图渲染组件232可以利用渲染树,所述渲染树识别将在要渲染的显示帧中可见的每个视图以及其在显示空间内的布局。当用户输入不太可能指向不可见或基本上被遮挡的视图时,此渲染树可以用作当前布局108的感兴趣视图及其位置的有效率表示。因此,方法500在框502处以视图渲染组件232确定或者访问当前布局108的渲染树而开始。在框504处,视图渲染组件232基于渲染树来渲染显示帧。

已渲染的显示帧包括注册表管理组件230可以在逻辑上分割成一组像素块的像素的2d阵列,其中每个像素块包括像素的此2d阵列的一个或多个像素。为了图示,可以在逻辑上将显示帧分割成4×4、8×8或16×16像素的像素块阵列。注册表管理组件230也构造包括条目的2d阵列512的视图映射510,其中每个条目512与对应像素块相关联。由此,在框506处,注册表管理组件230使用渲染树来针对每个像素块识别当前布局的视图中的任一个是否与像素块的地点重叠。在框508处,注册表管理组件230用识别被确定为与对应像素块重叠的任何视图的信息填充与每个像素块相关联的条目。在存在与给定像素块重叠的多个视图的情况下,与该像素块相对应的条目512可以被细分成多个子条目,其中每个子条目存储对应视图的id。每个子条目也可以包括视图的z编号或绘制次序,或者可以根据z编号或绘制次序来组织子条目。

由于确定与每个像素块重叠的视图的高度并行化性质,方法500可以有利地由gpu204实现。此外,鉴于显示帧的像素块的渲染与基于这些像素块的视图映射510的构造之间的紧密相关性,在一些实施例中方法500可以作为显示帧渲染过程的一部分被执行,其中gpu204的每个向量单元执行针对对应像素块的渲染过程以及针对相同像素块的重叠视图识别过程二者。

当视图映射510将视图映射到被显示空间中的该视图重叠的每一个像素块时,注册表管理组件230可以使用视图映射510来执行命中测试以通过识别位于坐标(x,y)处的像素块、识别与该像素块相关联的条目512来识别与在相对于显示空间的地点(x,y)处的定位事件相关联的终端视图。在所识别的条目512为空的情况下,注册表管理组件230返回空值,并且分派过程终止。在条目512识别单个视图的情况下,此单个视图的视图id由注册表管理组件230作为终端视图返回。在条目512识别多个视图的情况下,具有最低z值/绘制次序的视图的视图id可以作为终端视图被返回。

如图4中所示的作为四叉树数据结构的视图显示空间注册表116、如图5中所示的基于2d像素块的视图映射、或视图的其它基于空间的组织的实施方式由于性能、存储、或功率限制而可能是不可行的。因此,图6图示依照至少一个实施例的用于将视图显示空间注册表116的实施方式构造为基于列表的数据结构的方法600。方法600在框602处开始,其中注册表管理组件230利用来自当前布局108的信息来识别当前布局中的视图及其对应的位置信息。在框604处,注册表管理组件230基于所识别的视图来生成视图列表605。如图所示,视图列表605包含条目607的列表,每个条目607表示对应视图并且具有一个或多个字段,诸如存储条目的索引值的索引字段、存储由条目607所表示的视图的视图id的视图id字段、以及存储视图的z值或绘制次序值的深度字段。

取决于gui106的特定配置,当前布局108中的一些视图可能未被配置成接收位置用户输入,并且因此无法消费或者修改由位置用户输入触发的定位事件。因此,在框604处构造视图列表605期间,注册表管理组件230可以识别当前布局108的未被配置成接收位置用户输入的那些视图并且过滤掉这样的视图,使得视图列表605仅针对由框606所表示的、被识别为能够接收位置用户输入或者不确定具有关于接收位置用户输入的能力的视图包含条目607。然而,在预期任何给定布局中的仅相对少数目的视图的实施方式中,可以省略此过滤过程。

如由框608所图示的,注册表管理组件230可以通过沿循视图列表605进行搜索来识别具有与定位事件的地点重叠的位置的罗列视图来执行命中测试以识别定位事件的终端视图。为此,每个视图的位置可以在对应条目607的生成点处被确定并且被包括在条目607的对应位置字段(未示出)中。替选地,考虑中的视图的位置可以通过利用针对该视图返回维度或位置信息的一个或多个函数调用来确定。对视图列表605的搜索利用各种搜索方法学中的任一种。例如,搜索可以包括直接顺序搜索,其从列表中的第一条目开始、然后到列表中的第二个条目上并依此类推的。替选地,可以至少初步地按某个参数(诸如按z值、总视图大小等)对视图列表605进行排序,并且搜索可以充分利用此排序,诸如通过基于对应z编号对条目进行排序并且然后基于z编号次序来执行优先化搜索。

示例1:一种由电子设备执行的方法,所述方法包括:在所述电子设备的显示器处显示视图的布局;以及响应于经由所述电子设备的用户输入组件检测到与所述布局相关联的定位事件:基于所述定位事件的地点来识别视图的所述布局的终端视图;从所述布局构造所述终端视图的一个或多个祖先视图的祖先链;以及从所述祖先链的根视图开始在所述祖先链中顺序地分派所述定位事件。

示例2:根据示例1所述的方法,其中:显示视图的所述布局包括:显示具有有界框的第一视图;以及至少部分地在所述有界框外部显示第二视图,所述第二视图包括所述第一视图的子视图;识别所述布局的所述终端视图包括将所述第二视图识别为所述终端视图;构造所述祖先链包括在所述祖先链中将所述第一视图识别为所述第二视图的祖先;以及顺序地分派所述定位事件包括在将所述定位事件分派给所述第二视图之前将所述定位事件分派给所述第一视图。

示例3:根据示例2所述的方法,其中,顺序地将所述定位事件分派给所述第一视图包括禁用或者绕过由所述第一视图对定位事件的基于有界框的过滤。

示例4:根据示例1至3中的任一项所述的方法,其中,在所述祖先链中顺序地分派所述定位事件包括:沿循所述祖先链顺序地将所述定位事件分派给每个视图,直到或则所述祖先链的视图消费或修改所述定位事件或则所述终端视图拒绝所述定位事件为止。

示例5:根据示例4所述的方法,其中:所述定位事件是表示由用户执行的手势的定位事件的序列的初始定位事件;并且所述方法还包括:将所述序列中的其它定位事件分派给所述祖先链的消费或修改了所述初始定位事件的视图。

示例6:根据示例1至5中的任一示例所述的方法,还包括:提供将所述布局的每个视图映射到与所述布局相关联的显示空间中的一个或多个对应位置的数据结构;以及其中,识别所述终端视图包括:使用所述定位事件的地点基于对所述数据结构的查找来识别所述终端视图。

示例7:根据示例6所述的方法,其中,提供所述数据结构包括:将所述数据结构作为条目的二维阵列来提供,所述阵列的每个条目与所述显示器的显示空间的对应像素块相关联并且包括一个或多个子条目,每个子条目被配置成存储具有与所述显示空间中的该像素块重叠的位置的对应视图的标识符。

示例8:根据示例7所述的方法,其中,识别所述终端视图包括:识别所述阵列的与位于所述定位事件的位置处的像素块相关联的条目;以及选择由这样的子条目表示的视图作为所述终端视图:该子条目表示由所识别的条目的子条目表示的所有视图的最低绘制次序。

示例9:根据示例1至8中的任一项的方法,还包括:识别视图的所述布局的哪些视图被配置成消费或者修改定位事件;提供包括所识别的视图的列表的数据结构;以及其中,识别所述终端视图包括:使用所述定位事件的地点和所识别的视图的列表中的视图的位置来执行命中测试。

示例10:一种电子设备,包括:显示器,所述显示器用于显示视图的布局;用户输入组件,所述用户输入组件被布置成接收表示定位事件的输入;定位事件处理程序组件,所述定位事件处理程序组件被布置成检测所述定位事件;注册表管理组件,所述注册表管理组件用于基于所述定位事件的地点来识别视图的所述布局的终端视图;视图树管理组件,所述视图树管理组件被布置成从所述布局构造所述终端视图的一个或多个祖先视图的祖先链;以及其中,所述定位事件处理程序组件被布置成从所述祖先链的根视图开始在所述祖先链中顺序地分派所述定位事件。

示例11:根据示例10所述的电子设备,其中,所述布局包括:具有有界框的第一视图;以及至少部分地在所述有界框外部的第二视图,所述第二视图包括所述第一视图的子视图。

示例12:根据示例11所述的电子设备,其中,所述定位事件处理程序组件用于禁用或者绕过由所述第一视图对定位事件的基于有界框的过滤。

示例13:根据示例10至12中的任一项所述的电子设备,其中,所述定位事件处理程序组件被布置成通过以下操作来顺序地分派所述定位事件:沿循所述祖先链顺序地将所述定位事件分派给每个视图,直到或则所述祖先链的视图消费或修改所述定位事件或则所述终端视图拒绝所述定位事件为止。

示例14:根据示例13所述的电子设备,其中:所述定位事件是表示由用户执行的手势的定位事件的序列的初始定位事件;所述初始定位事件由所述祖先链的视图消费或者修改;以及所述定位事件处理程序组件被布置成将定位事件的所述序列中的剩余定位事件分派给消费或者修改了所述初始定位事件的视图。

示例15:根据示例10至14中的任一项的电子设备,其中:所述注册表管理组件被布置成提供将所述布局的每个视图映射到与所述布局相关联的显示空间中的一个或多个对应位置的数据结构;并且所述注册表管理组件被布置成通过以下操作来识别所述终端视图:使用所述定位事件的地点基于对所述数据结构的查找来识别所述终端视图。

示例16:根据示例15所述的电子设备,其中,所述数据结构包括四叉树数据结构。

示例17:根据示例15所述的电子设备,其中,所述数据结构包括条目的二维阵列,所述阵列的每个条目与所述显示器的显示空间的对应像素块相关联并且包括一个或多个子条目,每个子条目被配置成存储具有与所述显示空间中的像素块重叠的位置的对应视图的标识符。

示例18:一种由电子设备执行的方法,所述方法包括:在所述电子设备的显示器处提供表示视图的布局的视图的位置的数据结构;基于所述数据结构在所述电子设备处识别与第一定位事件的地点重叠的第一终端视图,所述第一终端视图被至少部分地定位在所述第一终端视图的父视图的有界框外部;以及沿循包括所述第一终端视图和所述第一终端视图的父视图的视图的第一链来分派所述第一定位事件。

示例19:根据示例18所述的方法,还包括:响应于所述显示器处的视图的布局中的变化,更新所述数据结构以表示已改变的布局中的视图的位置;基于经更新的数据结构在所述电子设备处识别与第二定位事件的位置重叠的第二终端视图,所述第二终端视图被至少部分地地点在所述第二终端视图的父视图的有界框外部;以及沿循包括所述第二终端视图和所述第二终端视图的父视图的视图的第二链来分派所述第二定位事件。

示例20:根据示例18至19中的任一项所述的方法,其中,所述数据结构包括以下各项中的至少一个:四叉树数据结构;所述布局的视图的列表;以及条目的二维阵列,所述阵列的每个条目与所述显示器的显示空间的对应像素块相关联并且包括一个或多个子条目,每个子条目被配置成存储具有与所述显示空间中的该像素块重叠的位置的对应视图的标识符。

示例21:一种包括计算机程序代码的计算机可读介质,所述计算机程序代码被布置成在由计算机执行时执行根据权利要求1至9或18至20中的任一项,或者实现根据权利要求10至17中的任一项所述的装置。

在一些实施例中,上述的技术的某些方面可以由执行软件的处理系统的一个或多个处理器来实现。软件包括存储或者以其它方式有形具体实现在非暂时性计算机可读存储介质上的一组或多组可执行指令。软件可包括指令和某些数据,所述指令和某些数据当由一个或多个处理器执行时,操纵一个或多个处理器以执行上述的技术的一个或多个方面。非暂时性计算机可读存储介质可包括例如磁或光盘存储设备、诸如闪速存储器的固态存储设备、高速缓存、随机存取存储器(ram)或其它一个或多个非易失性存储器设备等。存储在非暂时性计算机可读存储介质上的可执行指令可以是源代码、汇编语言代码、目标代码,或由一个或多个处理器解释或者以其它方式可执行的其它指令格式。

计算机可读存储介质可以包括在使用期间可由计算机系统访问以向计算机系统提供指令和/或数据的任何存储介质或这些存储介质的组合。这样的存储介质可包括但不限于光学介质(例如,紧致盘(cd)、数字通用盘(dvd)、蓝光盘)、磁介质(例如,软盘、磁带或磁硬盘驱动器)、易失性存储器(例如,随机存取存储器(ram)或高速缓存)、非易失性存储器(例如,只读存储器(rom)或闪速存储器)或基于微机电系统(mems)的存储介质。计算机可读存储介质可以被嵌入计算系统(例如,系统ram或rom)中,固定地附接到计算系统(例如,磁硬盘驱动器),可移除地附接到计算系统(例如,光盘或基于通用串行总线(usb)的闪速存储器),或者经由有线或无线网络(例如,网络可访问存储部(nas))耦合到计算机系统。

注意的是,并非上面在一般描述中描述的所有活动或元件都是必需的,特定活动或设备的一部分可以不是必需的,并且可以执行一个或多个另外的活动,或者包括除所描述的那些元素之外的元素。更进一步地,列举活动的次序不一定是它们被执行的次序。另外,已经参考具体实施例描述了这些概念。然而,本领域的普通技术人员了解的是,在不脱离如所附的权利要求书中所阐述的本公开的范围的情况下,可做出各种修改和改变。因此,本说明书和附图将在说明性而不是限制性意义上被考虑,并且所有这样的修改旨在被包括在本公开的范围内。

已经在上面关于具体实施例描述了有益效果、其它优点和问题的解决方案。然而,可以使任何有益效果、优点或解决方案发生或者变得更显著的有益效果、优点、问题的解决方案以及任何财产将不被解释为任何或所有权利要求的关键的、必需的或必要的财产。此外,上面所公开的特定实施例仅是说明性的,因为可以以对于受益于本文教导的本领域的技术人员而言显而易见的不同但等效的方式修改并实践所公开的主题。除如所附权利要求中所描述的以外,不旨在限制本文所示出的构造或设计的细节。因此明显的是,可以更改或者修改上面所公开的特定实施例,并且所有这样的变化均被认为在所公开的主题的范围内。因此,本文所要求保护的是如所附权利要求书中所阐述的那样。

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