一种视图层次的控制处理方法
【专利摘要】本发明提供一种视图层次的控制处理方法,应用于安卓系统,包括:针对每个Activity的视图根节点,添加视图对应的Z属性;将所述Z属性进行统一处理;在所述视图根节点下,根据统一处理后的所述Z属性来分配事件传递和层次空间,并按统一处理后的所述Z属性绘制视图。并且,Z属性为一个二维数组或多维数组,且Z属性至少包括第一参数和第二参数,第一参数为视图对应的Activity,第二参数为视图在对应的Activity的Z位置。本发明支持多Activity环境下的触屏消息处理;解决了Android视图重叠处理显示问题;弥补了设计视图时显示层次可操作性弱的缺点。
【专利说明】一种视图层次的控制处理方法
【技术领域】
[0001] 本发明涉及图像【技术领域】,特别是涉及一种应用于安卓系统的视图层次的控制处 理方法。
【背景技术】
[0002] 随着安卓Android系统的迅猛发展,它已经成为全球范围内具有广泛影响力的 操作系统。Android系统已经不仅仅是一款手机的操作系统,它越来越广泛的被应用于平 板电脑、可佩戴设备、电视、数码相机等设备上,这也造就了目前Android开发人才需求的 快速增长。Android平台首先就是其开放性,开发的平台允许任何移动终端厂商加入到 Android联盟中来。显著的开放性可以使其拥有更多的开发者,随着用户和应用的日益丰 富,一个崭新的平台也将很快走向成熟。不仅是Android系统的发展,硬件设备的快速发展 给Android带来了更好更强大的进步,从512MB的内存发展到现在的1G,2G甚至更大的内 存,CPU的处理速度的加快,屏幕尺寸的变大,这些亦给了 Android系统很多的机遇,同时也 给了 Android系统更多的挑战。很多以前受限的功能现在可以使用了,并且产生了许多新 的技术和手机设备。原来Android系统不建议添加的功能也可以实现了,Android系统不 支持多窗口,但随着屏幕尺寸的变大,设备性能的提高,多窗口也可以成为现实。
[0003] 目前,Android系统中,普通视图(View)是平铺在一个plane上面,其中的层次按 照绘图的先后顺序绘制。当一个Activity获得焦点,它会请求绘制其布局。Android框架 将会管理绘制的过程,但是Activity必须提供布局层次中的根节点。绘制视图是从布局的 根节点开始。请求计算和绘制布局树。绘制负责遍历树和渲染每个可交互的无效区域。依 次的,每一个View group负责请求绘制其子View,每一个View利用draw()方法负责绘制 自己。因为树是顺序遍历的,这就意味着先画父节点,即父View在子View的背后,然后依照 树的次序来绘制其他同级节点。Android框架只会重绘无效的区域,而且还会帮你绘制背景 图片。当 View 的 measureO 方法返回,它的 getMeasuredWidthO 和 getMeasuredHeightO 的值必须被设置,以及View所有后代的View的测量宽度和测量高度的值必须符合View的 父节点施加的约束。这样就可以保证测量传递的最后,所有的父节点接受他们子节点的尺 寸值。
[0004] 从绘制的过程可知,视图的绘制是从根节点处按顺序绘制的,其绘制逻辑有一个 先后顺序,这样就会涉及到一个问题:绘制的层次问题。如果同一级的视图,先绘制的视图 如果和后面的视图绘制区域有重叠的部分的话,逻辑上面比较单一,即Android会按照先 后顺序绘制,并且遮挡前面的视图。当然也可以设置透明度等属性以实现底下视图的可见 性,但是这样就无法很好的控制并处理视图叠加的逻辑关系,而且当需要管理其绘制过程 时,就无法突出层次关系,或者功能会受限制。
[0005] 专利《一种基于OpenGL的图层混合方法及装置》(申请号:CN201410264294. 9)提 供了一种基于OpenGL的图层混合方法及装置,其通过Android系统的3D应用接口创建主 界面视图层并对主界面视图层进行初始化;根据主界面视图层的后方视频层的TV画面的 大小,在主界面视图层的与TV画面对应的区域进行图形绘制,并将主界面视图层的与TV画 面对应的区域设置为透明;当视频层的TV画面需要叠加物体时,在主界面视图层绘制需要 叠加物体,并将主界面视图层的绘制叠加物体的区域设置为不透明。由于TV画面上叠加的 物体都是在主界面视图层创建的,不需要多个视图层进行叠加混合,更加容易控制。
[0006] 但是,Android系统虽然有很好的UI (User Interface,用户界面)视图界面,但是 也存在许多不足的地方:1.触屏事件的传递只能传递到一个Activity进行处理,并没有提 供多个Activity的处理方法;2.屏幕视图层次的控制不是很强大,它只是按先后的顺序绘 制出视图,并没有对层次进行更好的管理和控制,尤其体现在普通View和Surfaceview的 部分。GlSurfaceView继承自SurfaceView,当然也有上述的缺点。
【发明内容】
[0007] 鉴于以上所述现有技术的缺点,本发明的目的在于提供一种视图层次的控制处理 方法,用于解决现有技术中安卓系统中对叠加视图的控制和处理的问题。
[0008] 为实现上述目的及其他相关目的,本发明提供一种视图层次的控制处理方法,应 用于安卓系统,所述视图层次的控制处理方法包括:针对每个Activity的视图根节点,添 加视图对应的Z属性;将所述Z属性进行统一处理;在所述视图根节点下,根据统一处理后 的所述Z属性来分配事件传递和层次空间,并按统一处理后的所述Z属性绘制视图。
[0009] 可选地,所述Z属性为一个二维数组或多维数组,且所述Z属性至少包括第一 参数和第二参数,所述第一参数为视图对应的Activity,所述第二参数为视图在对应的 Activity 的 Z 位置。
[0010] 可选地,具有相同Activity的视图的所述Z属性的所述第一参数是相同。
[0011] 可选地,具有相同Activity的视图,所述Z属性的所述第二参数越大,对应的视图 层次越靠前。
[0012] 可选地,所述Z属性根据所述视图的Baselayer值和Sublayer值确定。
[0013] 可选地,所述 Z 属性由 ActivityManagerService 和 WindowManagerService 两个 系统服务进行统一处理计算。
[0014] 可选地,按所述Z属性绘制所述视图包括:根据所述Z属性的所述第一参 数选择当前活动视图;视图的绘制由所述Z属性的所述第一参数的Activity的 ActivityManagerService统一管理;在所述视图根节点处,先绘制所述Z属性的所述第二 参数小的视图;后绘制所述第二参数大的视图。
[0015] 可选地,所述当前活动视图是所述第一参数最大的视图。
[0016] 可选地,所述视图绘制完成后,所述Z属性返回至WindowManagerService, WindowManagerService根据所述Z属性控制分发触屏事件。
[0017] 如上所述,本发明的一种应用于安卓系统的视图层次的控制处理方法,在视图 类里面添加属性"Z",该值主要控制视图的层次关系,在同一表面上面控制显示的顺序。 WindowManagerService通过Z属性管理视图的绘制和显示,并控制分发触屏事件:如果一 个视图有一个Z属性,而同一块视图区域有一个重复的区域,可以通过Z属性分发触屏事 件;同时,还可以通过Z属性控制视图的层级关系,即上下互相遮挡的问题。本发明还具有 以下有益效果:支持多Activity环境下的触屏消息处理;解决了 Android视图重叠处理显 示问题;弥补了设计视图时显示层次可操作性弱的缺点。
【专利附图】
【附图说明】
[0018] 图1显示为本发明实施例公开的一种视图层次的控制处理方法的流程示意图。
[0019] 元件标号说明
[0020] Sll ?S13 步骤
【具体实施方式】
[0021] 以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书 所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实 施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离 本发明的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施 例中的特征可以相互组合。
[0022] 需要说明的是,以下实施例中所提供的图示仅以示意方式说明本发明的基本构 想,遂图式中仅显示与本发明中有关的组件而非按照实际实施时的组件数目、形状及尺寸 绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也 可能更为复杂。
[0023] 请参阅图1。本发明的适用于视图层次的控制处理方法,是一种控制视图绘制逻 辑的管理方法。利用给视图节点处添加一个"Z"轴。当然,这个"Z"轴是视图的一个属性 值,用来控制视图的层次关系,和3D的上面的"Z"有点区别,只取用3D空间"Z"轴的一个 属性来表示"深"和"浅"的逻辑关系。这样,就能更好的控制视图的叠加关系,而且在设置 了 "Z"轴之后,通过"Z"轴的属性分发触屏事件,为Android多窗口提供一种很好的方法。
[0024] 在Android系统中,无论是普通的Activity窗口,还是特殊的输入法窗口 和壁纸窗口,它们都是被WindowManagerService服务组织在一个窗口堆栈中的,其 中,Z轴位置较大的窗口排列在Z轴位置较小的窗口的上面。有了这个窗口堆栈之后, WindowManagerService服务就可以按照一定的规则计算每一个窗口的Z轴位置了。
[0025] ActivityManagerService 主要负责 Activity 管理,根据 Activity 打开的先后顺 序,通过堆栈来管理Activity列表,在Activity发生焦点切换时,和各Activity所处的应 用进程的主线程ActivityThread进行交互,控制整个焦点切换流程。引入Z属性,就可通 过输入的屏幕坐标和取Z轴最大的那个视图,将事件传递给该视图,从而使触屏事件的传 递有先后和立体的感觉,也为多窗口事件提供了方法。
[0026] 实施例
[0027] 本实施例公开了一种适用于安卓系统的视图层次的控制处理方法,把Z轴属性添 加到视图属性中,并且根据Z属性控制视图的显示层次和触屏事件,其中,因为Android的 窗口添加是平面添加的,Android的窗口主要分活动窗口和窗口属性,所以Z属性米用二维 的数组。
[0028] 如图1所示,本实施例的一种适用于安卓系统的视图层次的控制处理方法,包括:
[0029] 步骤Sll,在添加窗口视图的时候,针对每个Activity的视图根节点,添加视图对 应的Z属性:
[0030] Z属性为一个二维数组,包括第一参数和第二参数。其中,第一参数为视图所在的 Activity ;第二参数为视图所在Activity的Z位置。将Z属性设置为二维数组,是为了更 好的管理活动窗口和非活动窗口。
[0031] 以每个Activity的根节点作为该活动视图的根,添加该Activity窗口的视图。 并且,Z属性的第一参数只与Activity有关,即相同的Activity的视图的Z属性的第一 参数是相同的。如果安卓系统当前获得焦点的窗口发生了变化,那么就会调用成员函数 UpdateFocusedWindowLocked来重新计算安卓系统当前应该获得焦点的窗口。如果安卓系 统当前获得焦点的窗口真的发生了变化,即窗口堆栈的窗口排列发生了变化,那么在调用 成员函数UpdateFocusedWindowLocked的时候,调用成员函数assignLayersLocked来重新 计算安卓系统中所有窗口的Z轴位置,即交换之前活动窗口与所点击的窗口的Z属性的第 一参数。
[0032] 进一步地,如果安卓系统没有设置Z属性,则可由下面的方法进行赋值:
[0033] 在源码中(MTK 平台),路径 MT6582WET/frameworks/base/services/java/com/ android/server/wm/WindowState. java 中定义了两个参数
【权利要求】
1. 一种视图层次的控制处理方法,应用于安卓系统,其特征在于,所述视图层次的控制 处理方法包括: 针对每个Activity的视图根节点,添加视图对应的Z属性; 将所述Z属性进行统一处理; 在所述视图根节点下,根据统一处理后的所述Z属性来分配事件传递和层次空间,并 按统一处理后的所述Z属性绘制视图。
2. 根据权利要求1所述的视图层次的控制处理方法,其特征在于:所述Z属性为一个 二维数组或多维数组,且所述Z属性至少包括第一参数和第二参数,所述第一参数为视图 对应的Activity,所述第二参数为视图在对应的Activity的Z位置。
3. 根据权利要求2所述的视图层次的控制处理方法,其特征在于:具有相同Activity 的视图的所述Z属性的所述第一参数是相同。
4. 根据权利要求2所述的视图层次的控制处理方法,其特征在于:具有相同Activity 的视图,所述Z属性的所述第二参数越大,对应的视图层次越靠前。
5. 根据权利要求2所述的视图层次的控制处理方法,其特征在于:所述Z属性根据所 述视图的Baselayer值和Sublayer值确定。
6. 根据权利要求2所述的视图层次的控制处理方法,其特征在于:所述Z属性由 ActivityManagerService 和 WindowManagerService 两个系统服务进行统一处理计算。
7. 根据权利要求2所述的视图层次的控制处理方法,其特征在于;按所述Z属性绘制 所述视图包括: 根据所述Z属性的所述第一参数选择当前活动视图; 视图的绘制由所述Z属性的所述第一参数的Activity的ActivityManagerService统 一管理; 在所述视图根节点处,先绘制所述Z属性的所述第二参数小的视图;后绘制所述第二 参数大的视图。
8. 根据权利要求7所述的视图层次的控制处理方法,其特征在于:所述当前活动视图 是所述第一参数最大的视图。
9. 根据权利要求7所述的视图层次的控制处理方法,其特征在于:所述视图绘制完成 后,所述Z属性返回至WindowManagerService, WindowManagerService根据所述Z属性控 制分发触屏事件。
【文档编号】G06F9/44GK104461573SQ201410834091
【公开日】2015年3月25日 申请日期:2014年12月23日 优先权日:2014年12月23日
【发明者】刘海勇 申请人:上海斐讯数据通信技术有限公司