CN115994007A - 动画效果显示方法及电子设备 - Google Patents
动画效果显示方法及电子设备 Download PDFInfo
- Publication number
- CN115994007A CN115994007A CN202111526945.3A CN202111526945A CN115994007A CN 115994007 A CN115994007 A CN 115994007A CN 202111526945 A CN202111526945 A CN 202111526945A CN 115994007 A CN115994007 A CN 115994007A
- Authority
- CN
- China
- Prior art keywords
- animation
- animation effect
- rendering
- thread
- interface
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/451—Execution arrangements for user interfaces
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T13/00—Animation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computer Graphics (AREA)
- Human Computer Interaction (AREA)
- General Engineering & Computer Science (AREA)
- Processing Or Creating Images (AREA)
- User Interface Of Digital Computer (AREA)
Abstract
本申请实施例提供了动画效果显示方法及电子设备,涉及电子技术领域。本申请实施例提供的动画效果显示方法,在显示动画效果前,应用程序的UI线程或应用程序的渲染线程或渲染进程确定动画效果的持续时间内属性发生变化的控件,以及确定每一帧界面中控件的属性,然后由应用程序的渲染线程或渲染进程基于每一帧界面中控件的属性生成该帧界面对应的位图。由于在显示动画效果前已经确定了每一帧界面上控件的大小、位置等属性,进而不需要UI线程对每一帧界面进行测量、布局、绘制录制(录制),使得动画效果的显示不会受到UI线程阻塞的影响。
Description
技术领域
本申请涉及电子技术领域,尤其涉及动画效果显示方法及电子设备。
背景技术
随着电子技术的发展,越来越多的电子设备参与到用户的日常生活中。并且,随着电子设备的屏幕的分辨率、尺寸等参数越来越高,电子设备上可以显示的内容也越来越多。
应用程序可以通过调整界面上显示的控件的大小、宽高、透明度等属性,向用户展示动画效果。
但是,现有技术中UI线程需要承担显示动画效果的计算量以及其他任务,容易导致电子设备上应用程序的卡顿或者掉帧,进而降低用户的体验。
发明内容
本申请实施例提供了动画效果显示方法及电子设备,涉及电子技术领域。本申请实施例提供的动画效果显示方法,在显示动画效果前,应用程序的UI线程或应用程序的渲染线程或渲染进程确定动画效果的持续时间内属性发生变化的控件,以及确定每一帧界面中控件的属性,然后由应用程序的渲染线程或渲染进程基于每一帧界面中控件的属性生成该帧界面对应的位图。由于在显示动画效果前已经确定了每一帧界面上控件的大小、位置等属性,进而不需要UI线程对每一帧界面进行测量、布局、绘制录制(录制),使得动画效果的显示不会受到UI线程阻塞的影响。
第一方面,本申请实施例提供了一种动画效果显示方法,包括:接收到动画触发事件后,应用程序的UI线程根据该应用程序设置的第一控件组的第一动画效果的信息确定该第一动画效果的持续时间、该第一动画效果的起始时间和该第一动画效果的结束帧描述信息,该第一控件组包括一个或多个控件,该动画触发事件用于触发显示该第一动画效果;在该第一动画效果的持续时间内,在生成目标帧的显示数据时,根据该第一动画效果的起始时间、该第一动画效果的持续时间、该目标帧对应的时间和该第一动画效果的结束帧描述信息确定该目标帧的描述信息,该应用程序的渲染线程或渲染进程根据该目标帧的描述信息生成该目标帧的显示数据。
在上述实施例中,在动画的持续时间内,应用程序的渲染线程或渲染进程根据目标帧的描述信息生成界面,其中,目标帧的描述信息用于确定目标帧中控件的属性,如大小、位置、透明度等。在动画的持续时间内,由应用程序的渲染线程或渲染进程生成目标帧的显示数据,而无需由UI线程通过测量、布局、录制绘制生成目标帧的显示数据,进而避免了UI线程阻塞导致动画效果的卡顿。
结合第一方面的一些实施例,在一些实施例中,该第一动画效果的信息为该应用程序通过系统提供的动画接口配置的。
在上述实施例中,应用程序的开发者可以通过动画接口为任意一个或多个控件配置动画效果,方便应用程序的开发者进行配置。
结合第一方面的一些实施例,在一些实施例中,在该第一动画效果的持续时间内,在生成目标帧的显示数据时,根据该第一动画效果的起始时间、该第一动画效果的持续时间、该目标帧对应的时间、和该第一动画效果的结束帧描述信息确定该目标帧的描述信息,具体包括:该UI线程或该渲染线程或该渲染进程根据该第一动画效果的起始时间、该第一动画效果的持续时间、该目标帧对应的时间、和该第一动画效果的结束帧描述信息确定该目标帧的描述信息。
在上述实施例中,确定目标帧的描述信息可以由UI线程执行,也可以由渲染线程或渲染进程执行。其中,当确定目标帧的描述信息由渲染线程或渲染进程执行,则可以进一步降低UI线程的负载,降低动画效果卡顿的可能性。
结合第一方面的一些实施例,在一些实施例中,该方法还包括:该UI线程基于该第一动画效果的结束帧描述信息确定该第一动画效果的结束帧中控件的属性;该UI线程或该渲染线程或该渲染进程比较该第一动画效果的结束帧中控件的属性和该第一动画效果开始前控件的属性确定第二控件组,该第二控件组为该第一动画效果持续时间内属性发生变化的控件,该第二控件组包括该第一控件组;该第一控件组以该第一动画效果显示,该第二控件中除该第一控件组外的其他控件以第二动画效果显示,该动画触发事件还用于触发显示该第二动画效果。
在上述实施例中,UI线程通过比较动画效果的结束帧上控件的属性和动画效果开始前那一帧界面上控件的属性,确定动画效果持续时间内属性发生变化的控件,然后确定这些控件在动画效果的持续时间内的每一帧的属性,进而确定目标帧的显示数据。相比于确定动画效果的持续时间内每一帧界面上所有控件属性,可以降低计算量。
结合第一方面的一些实施例,在一些实施例中,该目标帧的描述信息用于确定该目标帧中该第二控件组中控件的属性,控件的属性包括控件的大小、控件的位置、控件的透明度中的至少一种。
在上述实施例中,控件的属性会直接影响控件的显示效果,通过确定控件的属性,可以确定目标帧的描述信息。
结合第一方面的一些实施例,在一些实施例中,该渲染线程或该渲染进程根据该目标帧的描述信息生成该目标帧的显示数据,具体包括:该渲染线程或该渲染进程根据该目标帧的描述信息更新第一渲染树,该渲染线程或该渲染进程基于更新后的该第一渲染树生成该目标帧的显示数据。
在上述实施例中,相比于应用程序的UI线程更新渲染树后,将渲染树同步给应用程序的渲染线程或渲染进程的方法,渲染进程或应用程序的渲染线程,可以基于目标帧的描述信息更新渲染树,并基于更新后的渲染树生成目标帧的显示数据的方法,在UI线程阻塞的情况下,仍然可以正常显示动画效果。
结合第一方面的一些实施例,在一些实施例中,该渲染线程或该渲染进程根据该目标帧的描述信息更新第一渲染树,具体包括:该渲染线程或该渲染进程根据该目标帧中该第二控件组中控件的属性更新该第一渲染树。
在上述实施例中,渲染进程或应用程序的渲染线程可以仅根据属性发生改变的控件在目标帧的属性更新渲染树,进而生成目标帧的显示数据。
结合第一方面的一些实施例,在一些实施例中,该第二控件组包括第三控件;该渲染线程或该渲染进程根据该第三控件的大小、预配置的策略调整第三控件上承载内容的大小,该策略用于基于控件的属性对该承载的内容执行裁切或缩放,该承载的内容包括图像、文字中的至少一种。
在上述实施例中,在动画效果的持续时间内,在控件的大小发生变化的情况下,电子设备还可以对控件上的内容进行裁切或缩放。
结合第一方面的一些实施例,在一些实施例中,该第三控件为图像控件ImageView,该第三控件上承载的内容为第一图像;该策略包括:比较第三控件的尺寸和该第一图像的尺寸的大小,对该第一图像执行裁剪或缩放。
在上述实施例中,在动画效果的持续时间内,在控件的大小发生变化的情况下,电子设备还可以对控件上的图像进行裁切或缩放。
结合第一方面的一些实施例,在一些实施例中,该第三控件为文本控件TextView,该第三控件上承载的内容为第一文本;该策略包括:比较第三控件的宽度和该第一文本的宽度,对该第一文本执行分行或合行。
在上述实施例中,在动画效果的持续时间内,在控件的大小发生变化的情况下,电子设备还可以对控件上的文本进行分行或合并。
结合第一方面的一些实施例,在一些实施例中,该第一渲染树为该第一动画效果的结束帧对应的渲染树;或者,该第一渲染树为该第一动画效果开始前的界面对应的渲染树。
在上述实施例中,应用程序的渲染线程或渲染进程基于目标帧描述信息更新的渲染树可以动画效果的结束界面对应的渲染树,也可以是动画效果开始前的界面对应的渲染树。
结合第一方面的一些实施例,在一些实施例中,该在接收到动画触发事件后,应用程序的UI线程根据应用程序设置的第一控件组的第一动画效果的信息确定该第一动画效果的持续时间、该第一动画效果的起始时间和该第一动画效果的结束帧描述信息后,该方法还包括:该UI线程注销该第一动画效果的动画回调CALLBACK_ANIMATION,该动画回调用于触发该UI线程对该第一控件组中的控件的属性执行修改。
在上述实施例中,电子设备可以从动画效果中确定目标帧的描述信息,并且注销回调使得应用程序的UI线程不再执行测量、布局、绘制录制,以避免UI线程堵塞导致动画效果发生卡顿。
结合第一方面的一些实施例,在一些实施例中,在该第一动画效果的持续时间内,该UI线程在第一时刻接收垂直同步信号,该渲染线程或该渲染进程在第二时刻基于根据该目标帧的描述信息生成该目标帧的显示数据;该第二时刻在该第一时刻的第一时长后,该第一时长为预设的。
在上述实施例中,渲染进程或应用程序的渲染线程可以独立的请求垂直同步信号,以生成动画效果持续时间内的每一帧界面;或者,也可以在UI线程接收到垂直同步信号后等待一段时间后生成动画效果持续时间内的每一帧界面,这样UI线程可以被非动画效果触发以修改控件的属性,并将修改后的控件的属性同步到渲染进程或应用程序的渲染线程中。
结合第一方面的一些实施例,在一些实施例中,在该第一动画效果的持续时间内,该渲染线程或该渲染进程确定第二参数,该第二参数包括该第二控件组中控件的大小和位置;该渲染线程或该渲染进程向该UI线程发送第二参数;该UI线程基于该第二参数确定该第二控件组中控件的大小和位置。
在上述实施例中,在动画效果的持续时间内,渲染进程或应用程序的渲染线程可以将界面上控件的位置和大小同步到UI线程,进而UI线程可以知道控件的真实位置和大小。
结合第一方面的一些实施例,在一些实施例中,该动画触发事件包括用户的交互、网络状态变化、该电子设备上其他应用程序向该应用程序发送的消息中的至少一种。
在上述实施例中,动画效果可以被多种方式触发。
第二方面,本申请实施例提供了一种电子设备,该电子设备包括:一个或多个处理器和存储器;该存储器与该一个或多个处理器耦合,该存储器用于存储计算机程序代码,该计算机程序代码包括计算机指令,该一个或多个处理器调用该计算机指令以使得该电子设备执行:接收到动画触发事件后,应用程序的UI线程根据该应用程序设置的第一控件组的第一动画效果的信息确定该第一动画效果的持续时间、该第一动画效果的起始时间和该第一动画效果的结束帧描述信息,该第一控件组包括一个或多个控件,该动画触发事件用于触发显示该第一动画效果;在该第一动画效果的持续时间内,在生成目标帧的显示数据时,根据该第一动画效果的起始时间、该第一动画效果的持续时间、该目标帧对应的时间和该第一动画效果的结束帧描述信息确定该目标帧的描述信息,该应用程序的渲染线程或渲染进程根据该目标帧的描述信息生成该目标帧的显示数据。
在上述实施例中,在动画的持续时间内,应用程序的渲染线程或渲染进程根据目标帧的描述信息生成界面,其中,目标帧的描述信息用于确定目标帧中控件的属性,如大小、位置、透明度等。在动画的持续时间内,由应用程序的渲染线程或渲染进程生成目标帧的显示数据,而无需由UI线程通过测量、布局、录制绘制生成目标帧的显示数据,进而避免了UI线程阻塞导致动画效果的卡顿。
结合第二方面的一些实施例,在一些实施例中,该第一动画效果为通过动画接口配置的。
结合第二方面的一些实施例,在一些实施例中,该一个或多个处理器,具体用于调用该计算机指令以使得该电子设备执行:该UI线程或该渲染线程或该渲染进程根据该第一动画效果的起始时间、该第一动画效果的持续时间、该目标帧对应的时间、和该第一动画效果的结束帧描述信息确定该目标帧的描述信息。
结合第二方面的一些实施例,在一些实施例中,该一个或多个处理器,还用于调用该计算机指令以使得该电子设备执行:该UI线程基于该第一动画效果的结束帧描述信息确定该第一动画效果的结束帧中控件的属性;该UI线程或该渲染线程或该渲染进程比较该第一动画效果的结束帧中控件的属性和该第一动画效果开始前控件的属性确定第二控件组,该第二控件组为该第一动画效果持续时间内属性发生变化的控件,该第二控件组包括该第一控件组;该第一控件组以该第一动画效果显示,该第二控件中除该第一控件组外的其他控件以第二动画效果显示,该动画触发事件还用于触发显示该第二动画效果。
结合第二方面的一些实施例,在一些实施例中,该目标帧的描述信息用于确定该目标帧中该第二控件组中控件的属性,控件的属性包括控件的大小、控件的位置、控件的透明度中的至少一种。
结合第二方面的一些实施例,在一些实施例中,该一个或多个处理器,具体用于调用该计算机指令以使得该电子设备执行:该渲染线程或该渲染进程根据该目标帧的描述信息更新第一渲染树,该渲染线程或该渲染进程基于更新后的该第一渲染树生成该目标帧的显示数据。
结合第二方面的一些实施例,在一些实施例中,该一个或多个处理器,具体用于调用该计算机指令以使得该电子设备执行:该渲染线程或该渲染进程根据该目标帧中该第二控件组中控件的属性更新该第一渲染树。
结合第二方面的一些实施例,在一些实施例中,该一个或多个处理器,还用于调用该计算机指令以使得该电子设备执行:该第二控件组包括第三控件;该渲染线程或该渲染进程根据该第三控件的大小、预配置的策略调整第三控件上承载内容的大小,该策略用于基于控件的属性对该承载的内容执行裁切或缩放,该承载的内容包括图像、文字中的至少一种。
结合第二方面的一些实施例,在一些实施例中,该第三控件为图像控件ImageView,该第三控件上承载的内容为第一图像;该策略包括:比较第三控件的尺寸和该第一图像的尺寸的大小,对该第一图像执行裁剪或缩放。
结合第二方面的一些实施例,在一些实施例中,该第三控件为文本控件TextView,该第三控件上承载的内容为第一文本;该策略包括:比较第三控件的宽度和该第一文本的宽度,对该第一文本执行分行或合行。
结合第二方面的一些实施例,在一些实施例中,该第一渲染树为该第一动画效果的结束帧对应的渲染树;或者,该第一渲染树为该第一动画效果开始前的界面对应的渲染树。
结合第二方面的一些实施例,在一些实施例中,该一个或多个处理器,还用于调用该计算机指令以使得该电子设备执行:
结合第二方面的一些实施例,在一些实施例中,该一个或多个处理器,还用于调用该计算机指令以使得该电子设备执行:该UI线程注销该第一动画效果的动画回调CALLBACK_ANIMATION,该动画回调用于触发该UI线程对该第一控件组中的控件的属性执行修改。
结合第二方面的一些实施例,在一些实施例中,该一个或多个处理器,还用于调用该计算机指令以使得该电子设备执行:在该第一动画效果的持续时间内,该UI线程在第一时刻接收垂直同步信号,该渲染线程或该渲染进程在第二时刻基于根据该目标帧的描述信息生成该目标帧的显示数据;该第二时刻在该第一时刻的第一时长后,该第一时长为预设的。
结合第二方面的一些实施例,在一些实施例中,该一个或多个处理器,还用于调用该计算机指令以使得该电子设备执行:在该第一动画效果的持续时间内,该渲染线程或该渲染进程确定第二参数,该第二参数包括该第二控件组中控件的大小和位置;该渲染线程或该渲染进程向该UI线程发送第二参数;该UI线程基于该第二参数确定该第二控件组中控件的大小和位置。
结合第二方面的一些实施例,在一些实施例中,该动画触发事件包括用户的交互、网络状态变化、该电子设备上其他应用程序向该应用程序发送的消息中的至少一种。
第三方面,本申请实施例提供了一种芯片系统,该芯片系统应用于电子设备,该芯片系统包括一个或多个处理器,该处理器用于调用计算机指令以使得该电子设备执行如第一方面以及第一方面中任一可能的实现方式描述的方法。
第四方面,本申请实施例提供一种包含指令的计算机程序产品,当上述计算机程序产品在电子设备上运行时,使得上述电子设备执行如第一方面以及第一方面中任一可能的实现方式描述的方法。
第五方面,本申请实施例提供一种计算机可读存储介质,包括指令,当上述指令在电子设备上运行时,使得上述电子设备执行如第一方面以及第一方面中任一可能的实现方式描述的方法。
可以理解地,上述第二方面提供的电子设备、第三方面提供的芯片系统、第四方面提供的计算机程序产品和第五方面提供的计算机存储介质均用于执行本申请实施例所提供的方法。因此,其所能达到的有益效果可参考对应方法中的有益效果,此处不再赘述。
附图说明
图1A、图1B为本申请实施例提供的界面的一个示例性示意图。
图2A、图2B为本申请实施例提供的界面的另一个示例性示意图。
图3为本申请实施例提供的一种动画效果显示方法的一个示例性示意图。
图4为本申请实施例提供的另一种动画效果显示方法的一个示例性示意图。
图5为本申请实施例提供的动画效果冲突的一个示例性示意图。
图6A-图6F为本申请实施例提供的多动画冲突下界面变化的一个示例性示意图。
图7A、图7B、图7C为本申请实施例提供的多动画情况下视图属性变化的一个示例性示意图。
图8为本申请实施例提供的动画效果显示方法的流程的一个示例示意图。
图9为本申请实施例提供的确定动画对象的一个示例性示意图。
图10为本申请实施例提供的确定每一帧界面中视图的属性的一个示例性示意图。
图11A-图11D为本申请实施例提供的动画参数变化的一个示例性示意图。
图12A、图12B为本申请实施例提供的多动画情况下界面变化的一个示例性示意图。
图13A、图13B、图13C为本申请实施例提供的渲染线程或渲染进程更新渲染树的时机的一个示例性示意图。
图14为本申请实施例提供的渲染线程更新动画参数时机的另一个示例性示意图。
图15A、图15B为本申请实施例提供的动画效果过程的一个示例性示意图。
图16A、图16B、图16C、图16D、图16E为本申请实施例提供的动画效果过程的一个示例性示意图。
图17为本申请实施例提供的UI线程数据确定视图属性的一个示例性示意图。
图18A为本申请实施例提供的图3所示方法执行过程中渲染树变化的一个示例性示意图。
图18B、图18C为本申请实施例提供的图4所示方法执行过程中渲染树变化的一个示例性示意图。
图19为本申请实施例提供的电子设备硬件架构的一个示例性示意图。
图20为本申请实施例的电子设备软件架构的一个示例性示意图。
具体实施方式
本申请以下实施例中所使用的术语只是为了描述特定实施例的目的,而并非旨在作为对本申请的限制。如在本申请的说明书所使用的那样,单数表达形式“一个”、“一种”、“该”、“上述”、“该”和“这一”旨在也包括复数表达形式,除非其上下文中明确地有相反指示。还应当理解,本申请中使用的术语“和/或”是指并包含一个或多个所列出项目的任何或所有可能组合。
以下,术语“第一”、“第二”仅用于描述目的,而不能理解为暗示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征,在本申请实施例的描述中,除非另有说明,“多个”的含义是两个或两个以上。
本申请以下实施例中的术语“用户界面(user interface,UI)”,是应用程序或操作系统与用户之间进行交互和信息交换的介质接口,它实现信息的内部形式与用户可以接受形式之间的转换。用户界面是通过java、可扩展标记语言(extensible markuplanguage,XML)等特定计算机语言编写的源代码,界面源代码在电子设备上经过解析,渲染,最终呈现为用户可以识别的内容。用户界面常用的表现形式是图形用户界面(graphicuser interface,GUI),是指采用图形方式显示的与计算机操作相关的用户界面。它可以是在电子设备的显示屏中显示的文本、图标、按钮、菜单、选项卡、文本框、对话框、状态栏、导航栏、Widget等可视的界面元素。
界面作为应用程序与用户之间的交互和信息交互的介质接口,在每一次垂直同步信号(Vsync-APP)到来时,电子设备需要为前台的应用程序生成该应用程序的界面。其中,垂直同步信号的频率与电子设备的屏幕的刷新率有关,例如垂直同步信号的频率与电子设备的屏幕的刷新率相同。
即每次电子设备刷新屏幕上显示的内容前,都需要为前台应用生成该应用程序的界面,以在屏幕刷新时向用户展示应用程序的新生成的界面。
动画(animation)效果作用于动画对象,动画对象可以是应用程序的界面(或窗口),或者,动画对象可以是应用程序的一个或多个控件(view,或者也可以称为视图)。从用户的角度来看,动画对象包括一个或多个控件,从应用程序的角度看,动画对象包括一个或多个视图。其中,视图是构成应用程序界面的基本元素,用户看到的应用程序的界面上的一个控件可以对应于一个或多个视图。
在本申请实施例中,若不做特殊说明,控件和视图表达的含义可以相同。
从时间维度拆解来看,动画对象在一段时间(至少两个垂直同步信号间隔时长)内的连贯的、顺滑的变化的过程即为动画效果。
(1)本申请实施例提供的被配置动画效果的界面,以及动画效果的显示方法
(1.1)被配置动画效果的界面
在本申请实施例中,动画可以包括:作用于外观的动画效果、作用于位置的动画效果、基于变换的动画效果、作用于内容的动画效果。其中,作用于外观的动画效果包括:透明度、圆角、边界颜色、边界线宽、背景颜色、阴影等;作用于位置的动画效果包括宽/高配置、x/y/z坐标、x/y/z锚点;基于变换的动画效果包括:平移、旋转、缩放、3D变换;作用于内容的动画效果包括:滤镜效果如模糊、色彩增强、灰度变化、增加杂色等。
其中,所有的动画可以作为控件的可配置的属性,控件的属性用于决定控件的显示方式,显示方式包括上述的作用于外观的动画效果、作用于位置的动画效果、基于变换的动画效果、作用于内容的动画效果等。
下面示例性的介绍被配置动画效果的界面。
图1A、图1B为本申请实施例提供的界面的一个示例性示意图。
如图1A所示,电子设备的屏幕上显示的界面为桌面应用程序的界面,桌面应用程序的界面上包括控件1A01。其中,控件1A01中包括阅读应用程序的图标。
桌面应用程序还可以包括其他应用程序的图标,如图库应用程序的图标、拨号应用程序的图标、信息应用程序的图标、联系人应用程序的图标。
响应于用户长按控件1A01,控件1A01扩大。
其中,在控件1A01放大的过程中,在界面上出现控件1A02。其中,控件1A01的放大过程即为一种动画。其中,在控件1A02是逐渐显示清楚的(如,透明度的变化)的情况下,则控件1A02逐渐显示清楚的过程也为一种动画。
图2A、图2B为本申请实施例提供的界面的另一个示例性示意图。
如图2A所示,电子设备的屏幕上显示的界面为桌面应用程序的界面,桌面应用程序的界面上包括控件2A01。其中,控件2A01为文件夹1,包括控件2A02、控件2A03、控件2A04,控件2A02为游戏应用程序的图标、控件2A03为手电筒应用程序的图标、控件2A04为图库应用程序的图标。
响应于用户点击控件2A02,控件2A01扩大并且移动,并且控件2A02、控件2A03、控件2A04扩大并且移动。
其中,控件2A01、控件2A02、控件2A03、控件2A04的扩大、移动过程同样是一种动画。
(1.2)动画效果的显示方法
实现图1A、图1B所示的界面,需要为控件1A01配置动画事件;实现图2A、图2B所示的界面,需要为控件2A01、控件2A02、控件2A03、控件2A04配置动画事件。
图3为本申请实施例提供的一种动画效果显示方法的一个示例性示意图。
如图3所示,动画效果的显示方法可以包括四个步骤:分别为,步骤S301:创建动画事件1;步骤S302:接收到垂直同步信号后,触发动画事件1的回调,按照动画事件1的逻辑修改视图的属性;步骤S303:测量(measure)、布局(layout)、绘制录制(draw,在软件渲染中也可以称为绘制)以生成渲染树;步骤S304:接收渲染树,并基于该渲染树绘制位图。其中,UI线程需要执行步骤S301、步骤S302、步骤S303;渲染线程需要执行步骤S304。其中,在动画效果的第一帧,电子设备需要执行步骤301、步骤302、步骤303、步骤304,在动画效果的持续时间内的每一帧,电子设备都需要执行步骤S302、步骤S303、步骤S304。
步骤S301:创建动画事件1
动画事件可以在任意时刻创建,与应用程序的逻辑有关,例如,可以是在接收到用户的输入、其他线程或进程向该应用程序发送的消息事件、网络数据请求更新后创建动画事件。动画事件中包括有实现动画效果的内部逻辑,例如动画效果的结束条件、动画效果持续时间内每一帧对视图属性的修改量。
动画事件在创建后,都会在UI线程注册回调(相当于注册动画事件),如UI线程的编舞者(Choregrapher)上注册回调,该回调用于UI线程在每次接收到垂直同步信号(Vsync-APP)后,触发UI线程处理该动画事件,按照动画事件的逻辑修改视图的属性。
其中,在动画效果结束时,UI线程会按照动画事件的逻辑主动注销掉动画事件在UI线程注册的回调。
步骤S302:接收到垂直同步信号后,触发动画事件1的回调,按照动画事件1的逻辑修改视图的属性
应用程序的UI线程的在接收到垂直同步信号(Vsync-APP)后,如图3中的垂直同步信号1、垂直同步信号2、垂直同步信号3,会依次的处理输入事件(CALLBACK_INPUT)、动画事件(CALLBACK_ANIMATION)、遍历事件(CALLBACK_TRAVERSAL)和提交事件(CALLBACK_COMMIT)。
应用程序的UI线程在处理动画事件(如,doCallbacks(CALLBACK_ANIMATION))的过程中,会依据动画事件的逻辑修改视图的属性。
例如,在图1A和图1B所示的界面中,控件1A02的尺寸从宽和高为200px的矩形扩大为宽和高为300px的矩形,持续时间为20帧。则,每一帧需要改变控件1A02的尺寸,即动画的第一帧修改控件1A02对应的视图的宽和高为205px的矩形,动画的第二帧修改控件1A02对应的视图的宽和高为210px的矩形。
步骤S303:测量、布局、绘制录制以生成渲染树
视图属性的变化会触发UI线程对应用程序的界面进行测量、布局、绘制录制。其中,测量用于确定每个视图的大小,布局用于确定每个视图的布局,绘制录制方法用于确定绘制该应用程序的位图需要的一个或多个绘制操作,并保存在渲染树的绘制指令列表中。
其中,输入事件和动画事件均可能会影响应用程序的界面上任意一个或多个视图的内容,所以应用程序的主线程需要先处理输入事件和动画事件,然后再处理遍历事件。应用程序的主线程在处理遍历事件的过程中,应用程序的UI线程对应用程序的界面进行测量、布局、绘制录制,确定每个视图的属性进而确定每个视图对应的渲染节点,生成渲染树。其中,渲染节点包括渲染属性(properties)和绘制指令列表(displaylist)。
其中,渲染树是UI线程生成的,用于生成应用程序界面的一个数据结构体。即,渲染树记录有生成应用程序一帧界面的所有信息。渲染树可以包括多个渲染节点,每个渲染节点包括渲染属性和绘制指令列表,绘制指令列表中包括一个或多个绘制操作。
其中,绘制操作为一个数据结构体,用于绘制图形,例如绘制线条、绘制变宽、绘制矩形、绘制文本等。绘制操作在渲染线程执行时会被转换为图像处理库的API调用,如OpenGL的接口调用。例如DrawLineOp是一个数据结构体,数据结构体里面包含有绘制的数据如线的长度、宽度等信息,还可以包含有底层图形处理库的drawLineOP对应的接口调用。
其中,绘制指令列表可以是一个缓冲区,该缓冲区中记录有应用程序一帧界面所包括的所有绘制操作或是所有绘制操作的标识,如地址、序号。当应用程序有多个窗口、或者在不同的显示区域(display)上显示时,需要独立的生成多个渲染树,其中,会独立的生成多个对应不同窗口、显示区域的绘制指令列表。在本申请实施例中,显示区域可以是一块屏幕、或者可以是虚拟屏幕(VirtualDisplay)等。虚拟屏幕可以是录屏时,电子设备用于承载屏幕上显示的内容的区域。
步骤S304:接收渲染树,并基于该渲染树绘制位图
UI线程生成渲染树后,将渲染树传递给渲染线程后,渲染线程基于渲染树生成位图。渲染线程获取一个硬件画布(HardwareCanvas),并在该硬件画布上执行渲染树中的绘制操作,进而生成位图。该位图会被传递给表面合成器(SurfaceFlinger)和硬件合成策略模块(Hardware Composer,HWC)获取,进而生成界面以送显。
与图3不同的是,本申请实施例提供了另一种动画效果显示方式,如图4所示。
图4为本申请实施例提供的另一种动画效果显示方法的一个示例性示意图。
如图4所示,动画效果的显示方法可以包括五个步骤:分别为,步骤S401:创建动画事件2;步骤S402:接收到垂直同步信号后,从动画事件2中获取动画效果的结束界面的描述信息(也可以称为结束帧描述信息)、动画效果的持续时间的描述信息;S403:对动画效果的结束界面进行测量、布局、绘制,确定渲染树1;步骤S404:接收渲染树1、基于动画效果的结束界面的描述信息、动画效果的持续时间的描述;S405:基于动画效果的结束界面的描述信息、动画效果的持续时间的描述信息更新渲染树1,基于更新后的渲染树1生成位图。
其中,UI线程需要执行步骤S401、步骤S402、步骤S403;渲染线程或渲染进程需要执行步骤S404、S405。其中,在动画效果的第一帧,电子设备需要执行步骤S401、步骤S402、步骤S403、步骤S404、步骤S405;在动画效果的持续时间内的每一帧,电子设备都需要执行步骤S405。其中,渲染进程可以是与应用程序独立的进程。
步骤S401:创建动画事件2
应用程序的UI线程通过动画接口创建动画事件2。其中,动画接口的描述可以参考下文中步骤S802中的描述,此处不再赘述。
与动画事件1不同的是,动画事件2在动画效果的持续时间内可以不在UI线程注册回调。
其中,动画事件2的创建时机可以参考步骤S301中的文字描述,此处不再赘述。
步骤S402:接收到垂直同步信号后,从动画事件2中获取动画效果的结束界面的描述信息、动画效果的持续时间的描述信息
与步骤S302不同的是,在接收到垂直同步信号后,如图中的垂直同步信号1、垂直同步信号2、垂直同步信号3,UI线程从动画事件2中获取动画效果的结束界面的描述信息、动画效果的持续时间的描述信息。并且UI线程不对视图的属性进行修改,也不会触发步骤S303。
可选的,在本申请一些实施例中,UI线程可以从动画事件2获取动画效果的步进量的描述信息、动画效果的持续时间的描述信息;或者,UI线程可以从动画事件2获取结束界面的描述信息、动画效果的步进量的描述信息等,在此不作限定。
值得说明的是,UI线程可以直接从动画事件2中获取动画效果的结束界面;或者,间接的从动画事件2中确定动画效果的结束界面。
S403:对动画效果的结束界面进行测量、布局、绘制,确定渲染树1
UI线程主动对动画效果的结束界面进行测量、布局、绘制录制,进而生成渲染树1。UI线程将渲染树1、动画效果的结束界面的描述信息、动画效果的持续时间的描述信息同步到渲染线程。
可选的,在本申请一些实施例中,UI线程将渲染树1、动画效果的持续时间的描述信息、动画效果的步进量的描述信息同步到渲染线程或渲染进程。
可选的,在本申请一些实施例中,UI线程将渲染树1、动画效果的结束界面的描述信息、动画效果的步进量的描述信息同步到渲染线程或渲染进程。
可选的,在本申请一些实施例中,UI线程将动画效果的结束界面的描述信息、动画效果的步进量的描述信息、动画效果的步进量的描述信息中的至少两个描述信息同步到渲染线程,而不同步渲染树1。在该情况下,在步骤S405中,渲染线程基于动画效果的结束界面的描述信息、动画效果的持续时间的描述信息更新更新渲染树0,渲染树0对应于动画效果开始前界面。
可选的,在本申请一些实施例中,UI线程可以基于动画效果的结束界面的描述信息、动画效果的步进量的描述信息、动画效果的步进量的描述信息中的至少两个描述信息,确定动画效果的持续时间内每一帧界面中视图的属性,进而可以将动画效果的持续时间内每一帧界面中视图的属性值和渲染树1同步到渲染线程或渲染进程。
步骤S404:接收渲染树1、基于动画效果的结束界面的描述信息、动画效果的持续时间的描述信息
其中,应用程序的渲染线程可以通过消息队列接收UI线程发送的数据,渲染进程可以通过跨进程通信的方式接收UI线程发送的数据。渲染进程还可以在独立的请求并接收到垂直同步信号后,向UI线程请求并获取到数据。
S405:基于动画效果的结束界面的描述信息、动画效果的持续时间的描述信息更新渲染树1,基于更新后的渲染树1生成位图
应用程序的渲染线程或渲染进程基于动画效果的结束界面的描述信息和动画效果的开始前界面确定属性变化的视图。渲染线程基于动画效果的持续时间确定属性的步进量,进而确定动画效果的持续时间内每一帧界面中视图的属性。
对于动画效果内的一帧界面的生成过程来说,应用程序的渲染线程或渲染进程首先可以确定该帧在动画效果内的次序,即该帧是动画效果的第几帧。进一步的,可以确定该帧界面上视图的属性,即确定该帧的动画效果描述信息。
其中,确定该帧是动画效果的第几帧,可以通过该帧的时间、垂直同步信号的频率、和动画效果的起始时间确定。其中,动画效果的起始时间为动画效果的第一帧界面对应的垂直同步信号的时间,如图4中的垂直同步信号1,或者,动画效果的起始时间还可以为动画触发事件的时刻等,在此不作限定。
渲染线程在确定动画效果的持续时间内每一帧界面中视图的属性后,可以在接收到垂直同步信号后,如图4中的垂直同步信号2、垂直同步信号3,更新渲染树1中与视图属性对应的参数,然后基于更新后的渲染树1生成位图。
在动画的持续时间内的除第一帧后的每一帧,只需要应用程序的渲染线程或渲染进程执行步骤S405即可绘制出动画效果中的每一帧界面,进而显示动画效果。
值得说明的是UI线程和渲染线程或渲染进程的执行可以分别的由不同的垂直同步信号触发。例如,UI线程接受的垂直同步信号与渲染线程接收的垂直同步信号可以是周期相同、相位不同(有固定时间差)的垂直同步信号。
很显然的,对于图3所示的动画效果显示方法,当UI线程被其他任务阻塞,或者UI线程执行步骤S303的耗时较长的情况下,渲染线程不能在垂直同步信号2到来前生成位图,会发生掉帧、卡顿等情况。但是,对于图4所示的动画效果显示方法,在动画的持续时间内的除第一帧后的每一帧界面生成过程中,主要由渲染线程或渲染进程更新渲染树进而生成动画的持续时间内的多帧界面,UI线程不参与或者UI线程承担的计算量或任务量较小,当UI线程被其他任务阻塞,不容易发生掉帧、卡顿等情况。
除此之外,对于图3所示的动画效果显示方法,当存在多个动画事件的情况下,不同的动画效果会互相冲突,使得只有一个动画效果显示,进而导致界面发生跳变,不利于用户的体验。
下面示例性的介绍,多动画效果互相冲突的原因和多动画效果导致的界面跳变情况。
(1.3)动画效果的冲突
图5为本申请实施例提供的动画效果冲突的一个示例性示意图。
如图5所示,电子设备执行图3所示的动画效果的方法的过程包括:
S501:创建动画事件4
在动画效果3的持续时间内,响应于用户的输入、其他消息等,UI线程创建动画事件4,并在UI线程注册动画事件4对应的回调。
S502:接收到垂直同步信号后,触发动画事件3的回调和动画事件4的回调,按照动画事件3的逻辑修改视图的属性,然后按照动画事件4的逻辑修改视图的属性
在接受到垂直同步信号1后,触发动画事件3的回调和动画事件4的回调,UI线程分别按照动画事件3的逻辑修改视图的属性,按照动画事件4的逻辑修改视图的属性。在该情况下,动画事件4的逻辑可能会覆盖动画事件3对视图的属性的修改。
例如,动画事件3修改的视图包括视图1,动画事件4修改的视图包括视图1。视图1在修改前为20像素的正方形,动画事件3的逻辑修改视图1为30像素的正方形,动画事件4的逻辑修改视图1为15像素的正方形。UI线程分别按照动画事件3的逻辑修改视图的属性,按照动画事件4的逻辑修改视图1的属性,视图1最后变为15像素的正方形。
在该情况,UI线程实际上没有执行动画事件3的逻辑,动画效果事件3对应的动画效果没有正确显示,会导致界面的跳变。其中,界面的跳变如图6A至图6F所示。
然后执行步骤S303、步骤S304。然后执行步骤S303、步骤S304,步骤303和步骤S304的内容可以参考上文中图3对应的文字描述,此处不再赘述。
图6A-图6F为本申请实施例提供的多动画冲突下界面变化的一个示例性示意图。
如图6A所示,电子设备的屏幕上显示有桌面应用程序的界面。桌面应用程序的界面上包括控件2A01,控件2A01作为父控件还可以包括若干子控件,例如包括控件2A02、控件2A03、控件2A04。
其中,控件2A01可以是桌面应用程序上的文件夹、或卡片,例如在图6A-图6E中控件2A01为文件夹1,控件2A02包括游戏应用程序的图标,控件2A03包括手电筒应用程序的图标,控件2A04包括图库应用程序的图标。
其中,图6A所示的界面可以认为是动画效果1的开始前界面。
响应于用户点击控件2A01,该交互可以触发动画效果1。动画效果1作用于控件2A01、控件2A02、控件2A03、控件2A04,即控件2A01、控件2A02、控件2A03、控件2A04为动画效果1的动画对象,动画效果1使得动画对象尺寸逐渐变大且位置向界面中央移动。
如图6B所示,控件2A02的尺寸逐渐变大,如高度变大和/或宽度变大,并且位置发生变化。在图6B所示的界面中,包括动画效果1的开始界面以及动画效果1的中间界面。
如图6C所示,随着控件2A02的尺寸不断变大,即电子设备上显示的界面的变化为:动画效果1的中间界面变化至动画效果1的结束界面的过程。
如图6D所示,当动画效果1结束前,用户点击桌面上不属于控件2A01的部分,或者通过其他交互方式,如“返回(back)”交互手势等,返回图6A所示的界面,此时该交互会触发动画效果2。其中,动画效果2作用于控件2A01、控件2A02、控件2A03、控件2A04,即控件2A01、控件2A02、控件2A03、控件2A04为动画效果2的动画对象,动画效果2的效果是使得动画对象尺寸逐渐变小且位置向图1A中控件2A01的位置移动。
由于动画效果1还没有结束,此时动画效果2发生,且动画效果1与动画效果2作用的动画对象有交集,且动画效果1与动画效果2都需要通过修动画对象对应的视图的尺寸、位置,导致动画效果1和动画效果2有冲突。在该情况下,界面可以由两种变化方式,分别为图6E所示的界面和图6F所示的界面。
如图6E所示,响应于用户点击桌面上不属于控件2A01的部分,或者通过其他交互方式,如“返回(back)”交互手势等,此时使动画效果1的中间界面作为动画效果2的开始界面,并开始按照动画效果2的逻辑修改视图的属性,例如,从动画效果1的中间界面开始变化,进而变化为动画效果2的结束界面。
或者,如图6F所示,响应于用户点击桌面上不属于控件2A01的部分,或者通过其他交互方式,如“返回(back)”交互手势等,此时电子设备显示界面的变化分为两步:
图6F中的(1):电子设备显示的内容从动画效果1的中间界面直接跳转到动画效果1的结束界面。
图6F中的(2):在下一帧,动画效果1的结束界面作为动画效果2的开始界面,按照动画效果2的逻辑逐渐变换到动画效果2的结束界面。即,在图6F中,控件2A01逐渐变小,直至变化到图6A所示的大小,并且控件2A01的位置回到图6A所示的控件2A01的位置。
很显然的,在多动画效果冲突下,界面的变化会出现跳变,或者是界面变化的速度出现跳变,导致界面的变化不连贯,不符合用户的视觉习惯,如图7A、图7B、图7C所示,进而降低了用户的体验。
图7A、图7B、图7C为本申请实施例提供的多动画情况下视图属性变化的一个示例性示意图。
如图7A所示,动画效果1的预计持续时间为T1至T3,动画效果2的预计持续时间为T2至T4,其中,T1小于T2,T2小于T3,T3小于T4,预计持续时间为动画效果被应用程序配置的时间,动画效果1会增加视图的高度;动画效果2会减少视图的高度。
在图7A所示的情况下,视图属性变化的情况如图7B或图7C所示。
如图7B所示,在T1至T2,视图属性按照动画效果1的逻辑进行变化,例如,视图的高度线性增加;在T2时刻,由于动画效果1和动画效果2冲突,视图属性如高度发生跳变;在T2至T4,视图属性按照动画效果2的逻辑进行变化,例如,视图的高度线性减少。
很显然的,在T2时刻,动画效果1和动画效果2衔接处视图属性,例如高度,发生跳变。
如图7C所示,在T1至T2,视图属性按照动画效果1的逻辑进行变化,例如,视图的高度线性增加;在T2时刻,由于动画效果1和动画效果2冲突,开始按照动画效果2的逻辑进行变化,例如视图的高度线性减少。
很显然的,在T2时刻,动画效果1和动画效果2衔接处视图属性,例如高度的变化速率,发生跳变。其中,在图7B、图7C中,动画效果1的实际持续时间为T2-T1。动画效果2的持续时间为T2至T4。
值得说明的是,除了图7A、图7B、图7C所示的内容,不同种类的动画效果在冲突的情况下,同样会导致界面显示不正确或者界面跳变。
(2)本申请实施例提供的动画效果显示方法
本申请实施例提供的动画效果显示方法,首先本申请实施例提供一种用于实现动画效果的动画接口,动画接口可以是一个或多个函数、方法的方式,应用程序通过动画接口可以设置控件的属性或者动画效果等信息,从而让本申请提供的动画框架根据这些信息生成对应的动画界面。其中,动画接口中可以设置的信息包括:动画效果的结束界面以及动画效果的持续时间;或者,动画效果的步进量描述信息以及动画效果的持续时间;或者,动画效果的步进量描述信息以及动画效果的结束界面描述信息等。该动画接口有助于降低应用程序开发者的工作量。并且,应用程序的开发者可以不配置动画效果过程中每一帧的界面,由渲染线程或渲染进程独立的确定动画效果过程中每一帧的界面。
本申请实施例提供的动画效果显示方法,其次,在动画效果的显示过程中,并不修改视图的属性,而是通过增加并且修改渲染树的渲染属性中的动画参数,进而绘制出动画效果的持续过程中每一帧的界面。即,动画参数可以为用于更新渲染树的参数,可以包括动画效果过程中一帧界面上有变化的控件的属性。
本申请实施例提供的动画效果显示方法,再次,在动画过程中,由于不需要修改视图的属性而是修改渲染树的渲染属性中的参数,所以UI线程可以不再响应动画事件,以及测量、布局、绘制录制,进而有助于避免掉帧。其中,修改渲染树的渲染属性是由渲染线程或渲染进程负责的。
本申请实施例提供的动画效果显示方法,最后,在多个动画效果冲突的情况下,由于本申请实施例提供的动画效果显示方法是基于动画效果的结束界面修改显示内容的,故可以实现界面的连续变化(或者是界面变化的速度连续),进而实现更流畅的界面,提升用户的体验。
下面示例性的介绍本申请实施例提供的动画效果显示方法。
(2.1)动画效果显示方法的流程
图8为本申请实施例提供的动画效果显示方法的流程的一个示例示意图。
如图8所示,本申请实施例提供的动画效果显示方法的流程包括:
S801:应用程序的UI线程创建动画事件
动画事件可以在任意时刻创建,与应用程序的逻辑有关,例如,可以是在接收到用户的输入、其他线程或进程向该应用程序发送的消息事件、网络数据请求更新后创建动画事件。动画事件中包括有实现动画效果的内部逻辑。为了方便描述,称这些触发应用程序的UI线程创建动画事件的消息为动画触发事件。
在本申请实施例中,动画事件在创建后,会在应用程序的UI线程的编舞者上注册一次回调。该回调用于在动画事件创建后的第一个垂直同步信号,触发应用程序的UI线程处理该动画事件。
下文中,为了区分图3和图4所示方法中动画事件,将图3方法中的动画事件为非隐式动画,图4中的动画事件为隐式动画。其中,应用程序开发人员使用本申请实施例提供的动画接口创建的动画事件为隐式动画。
值得说明使得,隐式动画和非隐式动画仅仅为方便对比说明图3和图4中的内容所起的一个简称,并不对本申请实施例中由动画接口创建的动画事件作任何限定。
可选的,在本申请一些实施例中,可以将隐式动画转换为非隐式动画。其中,该转换过程可以发生在安装或者第一次启动该应用程序的过程中,或者该转换过程可以发送在编译过程中,在此不作限定。
例如,非隐式动画确定有对画对象、每帧垂直同步信号的回调、以及对视图的属性的修改等、动画的结束条件等。其中,每帧垂直同步信号的回调用于在动画不满足结束条件时一直触发UI线程去处理该动画事件。在该情况下,动画事件转换为隐式动画的过程可以包括如下两步:
首先,阻住或拦截非隐式动画的每帧垂直同步信号的回调,使得非隐式动画不会修改视图的属性、不会触发应用程序的UI线程进行测量、布局、绘制录制。
其次,确定隐式动画所需要的参数。例如,通过修改垂直同步信号(Vsync-APP)的时间信息,确定动画的结束界面以及持续时间。或者,对于一些非隐式动画,可以直接确定动画的动画对象、每个动画对象的每个属性的步进量、动画的持续时间、动画的结束界面等。
S802:应用程序的UI线程,接收到垂直同步信号后,从动画事件中确定动画效果的结束界面,动画效果的持续时间
应用程序的UI线程在接收到垂直同步信号后,会处理该动画事件。其中,该动画事件由动画接口配置,动画接口的格式可以为:动画接口的名称(持续时间,结束界面描述信息)、动画接口的名称(持续时间,变化曲线,结束界面描述信息)、动画接口的名称(步进量描述信息、结束界面描述信息)、动画接口的名称(持续时间,结束界面描述信息)等,在此不作限定。
其中,结束界面的描述中除了视图的位置、大小、透明度等,还可以包括主题(style)。其中,结束界面的描述可以相对于动画效果的开始前界面的增量,如视图1变宽了多少。
其中,步进量描述信息可以包括当前要被渲染的界面相比于上一帧界面中控件的属性的变化量。
在动画接口的格式为:动画接口的名称(持续时间,变化曲线,最终界面)的情况下,动画接口可以是:
animateTo({duration:3000,cure:Curve.Linear},()=>{
view1.Heigt=800
view1.Width=400
})
其中,animateTo为动画接口的名称,duration:3000表示持续时间为3000ms,cure:Curve.Linear表示曲线为线性曲线;“view1.Heigt=800view1.Width=400”表示动画的结束界面中view1的高为800,宽为400,即为动画的结束帧描述信息。
其中,动画接口为系统提供的一个或多个函数、方法,应用程序的开发者可以通过调用该动画接口为界面上的控件配置动画效果,并且配置动画效果的信息。其中,动画效果的信息包括:动画效果的持续时间、动画效果的结束帧描述信息等。
在应用程序运行的过程中,应用程序接收到动画触发事件后,可以将动画效果的信息通过动画接口提供给系统,系统进而可以基于这些信息生成动画过程中的每一帧界面。
在这种格式下,电子设备可以根据动画的结束界面和动画的开始前界面之间的区别,确定动画对象。
值得说明的是,该动画事件可以只在UI线程的编舞者中注册一次回调。
S803:渲染进程或应用程序的渲染线程基于动画效果的结束界面,动画效果的持续时间更新渲染树,并基于更新后的渲染树生成位图
UI线程在确定动画效果的结束界面、动画效果的持续时间后,可以将动画效果的结束界面、动画效果的持续时间传递给渲染进程或应用程序的渲染线程,进而渲染进程或应用程序的渲染线程可以确定动画效果的持续时间内每一帧界面中视图的属性,进而可以直接更新渲染树,并基于更新后的渲染树的生成位图。
在生成一帧界面的过程中,渲染进程或应用程序的渲染线程需要确定当前帧为动画效果内的第几帧,进而确定该帧界面上视图的属性。渲染进程或应用程序的渲染线程可以通过已经接收到的垂直同步信号的个数、垂直同步信号中的时间等多种方式确定当前帧为动画效果内的第几帧,在此不作限定。其中,当前帧为动画效果内的第几帧也可以称为该帧在动画效果内的次序。即该帧的描述信息包括该帧界面上视图的属性。
应用程序需要显示的界面由多个视图嵌套组成,不同的视图之间具有父子关系,所以遍历视图生成的渲染树的渲染节点之间的父子关系与视图的父子关系相同。即视图之间的父子关系决定了不同渲染节点的之间的嵌套关系,进而渲染线程在依据渲染树生成位图时可以正确渲染出应用程序的界面。
一个view可以对应一个或多个渲染节点,根视图(DecorView)对应根渲染节点(RootRenderNode)。即渲染节点之间的嵌套关系与视图的父子关系对应。
例如,应用程序的界面的结构为:应用程序的PhoneWindow上承载有根视图,根视图的子视图为视图1和视图2,视图2的子视图为视图3。则应用程序的UI线程生成渲染树的结构为:与PhoneWindow对应的根渲染节点为渲染树的根节点,根渲染节点的子节点为与根视图对应的渲染节点0,渲染节点0的子节点为与视图1对应的渲染节点1和与视图2对应的渲染节点2,渲染节点2的子节点为与视图3对应的渲染节点3。其中,视图与渲染节点对应的关系是指,渲染节点中包括有对应视图中的所有绘制操作。其中,一个视图可以对应一个或多个渲染节点。
下面结合图9、图10所示的内容,示例的介绍确定动画效果的持续时间内每一帧界面中视图的属性的方法。其中,一帧界面中的视图的属性也可以称为一帧界面的描述信息。
图9为本申请实施例提供的确定动画对象的一个示例性示意图。
如图9所示,应用程序的界面包括视图1和视图2和视图3,并且视图1和视图2和视图3的水平(视图的宽度方向为水平)间隔固定。
当视图2被配置有将宽度从B1变换到B2的动画效果,其中,B2大于B1大于0。很显然的,视图2为非隐式动画的动画对象,但是,对比动画效果的开始前界面和动画效果的结束界面,由于视图2的宽度变化导致视图3的位置发生变化。所以,图3所示的方法的需要应用程序的UI线程在依据非隐式动画的逻辑修改视图的属性后,需要测量、布局、绘制录制,进而保证动画后的界面的正确。
很显然的,对比图4以及图8所示的方法,由于视图2和视图3的属性发生变化,则可以确定动画对象为视图2和视图3。
可选的,在本申请一些实施例中,动画对象可以只在动画效果的中间界面发生变化,在动画的结束界面和动画的开始前界面不发生变换,应用程序的UI线程可以通过调整垂直同步信号的时间信息,判断动画过程中每一帧的发生变化的视图的集合为动画对象。
图10为本申请实施例提供的确定每一帧界面中视图的属性的一个示例性示意图。
如图10所示,动画事件为隐式动画,并且确定有动画的开始前界面和动画的结束界面。应用程序的主线程、渲染线程或渲染进程可以比较动画的开始前界面和动画的结界面,确定发生改变的控件为该动画涉及的动画对象。例如,动画对象包括控件2A01。
其中,控件2A01的位置从(x0,y0)变化到(x1,y1),即控件2A01为该动画事件涉及的动画对象。除此之外,控件2A01的高/宽变为原来的S倍,以及动画的持续时间为30帧。进而,还可以确定每一帧界面上控件2A01的位置、大小。控件2A01的第Q帧(Q从动画的开始前界面开始计算)为(x0+Q*δX,y0+Q*δY),其中δX=(x1-x0)/30,δY=(y1-y0)/30。
其中,每一帧动画参数的值即为(x0+Q*δX,y0+Q*δY),动画参数的步进量描述信息可以为δX=(x1-x0)/30、δY=(y1-y0)/30。即,动画参数为包括用于确定动画效果中一帧界面上视图的属性的信息,如上文中的动画效果的结束界面的描述信息、动画效果的持续时间的描述信息等等,或者,动画参数为动画效果中一帧界面上视图的属性的信息。
在后文中,为了方便描述,用动画参数指代一帧界面上视图的属性或者是用于确定一帧界面上视图的属性的参数,即动画参数指代一帧界面的描述信息或者动画参数是用于确定一帧界面的描述信息的参数。
上面在介绍了单个动画事件情况下,确定动画参数的过程,下面主要介绍多个动画事件情况下,确定动画参数的过程。
可选的,在本申请一些实施例中,在动画对象的动画参数被多个动画事件进行修改的情况下,基于各个动画事件独立确定的动画参数进行矢量叠加确定最终的用于在步骤S1002中更新渲染树的动画参数。
可选的,在本申请一些实施例中,在动画对象的动画参数被多个动画效果进行修改的情况下,例如,在动画对象的动画参数被动画效果1和动画效果2修改的情况下(动画效果1的持续时间内,动画效果2发生),可以基于动画效果1和动画事件2生成动画效果3,基于动画效果3的逻辑确定动画参数的修改量,其中动画效果3的逻辑由动画效果1的逻辑和动画事件2的效果确定。
其中,动画效果3对动画参数的修改,使得视图属性在动画效果的持续时间内连续;或者,进一步的动画参数一阶可导;或者,进一步的动画参数二阶可导等。其中,动画效果3的持续时间可以是动画效果1和动画效果2的持续时间的交集,或者是动画效果1和动画效果2交集开始处至动画效果1的结束或动画效果2的结束。
值得说明的是,由于已知动画效果的结束界面和动画效果的开始前界面,故可以通过插值器确定动画效果持续时间内每一帧视图的属性,进而使得每一帧视图的属性随着时间的变化连续、一阶可导、二阶可导。
其中,动画参数可以由渲染线程或渲染进程确定;或者,也可以有UI线程确定,将动画参数的每一帧的值传递到渲染线程或渲染进程,其中,用于在UI线程和渲染线程中进行通信,并且承载动画参数的变化的数据,或者承载用于计算动画参数的变化的结束界面,该数据可以称为Staging渲染树。
下面结合图11A至图11D所示的内容示例性的介绍多动画情况下确定动画参数的过程。
图11A-图11D为本申请实施例提供的动画参数变化的一个示例性示意图。
图11A所示的内容可以参考图7A所示的内容,此处不再赘述。
如图11B所示,在T2,应用程序接收到动画效果2对应的动画触发事件,并且确定动画效果2涉及对视图的高度的修改,则生成动画效果3,用于平滑动画效果1和动画效果1的衔接处。
其中,动画效果3的持续时间为动画效果1和动画效果2的持续时间的交集,即T2至T3。其中,由于已知动画效果3的起始界面以及动画效果3的结束界面,故,动画效果3作为衔接动画效果1和动画效果2的动画效果,对视图的属性的修改使视图的属性在T2至T3之间连续或一阶可导或二阶可导。其中,T2至T3内的动画效果可以称为过渡过程。
如图11C所示,在T2,应用程序接收到动画效果2对应的动画触发事件,并且确定动画效果2涉及对高度的修改,则生成的动画效果3,用于平滑动画1和动画2的衔接处。
其中,动画效果3的持续时间为T2至T4,动画效果3的起始界面为T2时的动画效果1对应的界面,动画效果3的结束界面为动画效果2的结束界面。故,动画效果3作为衔接动画效果1和动画效果2的动画效果,对视图的属性的修改使视图的属性在T2至T4之间连续或一阶可导或二阶可导。
如图11D所示,在T2,应用程序接收到动画效果2对应的动画触发事件,并且确定动画效果2涉及对高度的修改,则生成的动画效果3,用于平滑动画1和动画2的衔接处。
其中,动画效果3的持续时间为T3至T4,动画效果3的起始界面为动画效果1的结束界面,动画效果3的结束界面为动画效果2的结束界面。故,动画效果3作为衔接动画效果1和动画效果2的动画效果,对视图的属性的修改使视图的属性在T3至T4之间连续或一阶可导或二阶可导。
下面结合图11B所示的动画参数变化介绍应用程序的界面的变化,应用程序的界面的变化如图12A、图12B所示。
图12A、图12B为本申请实施例提供的多动画情况下界面变化的一个示例性示意图。
图6A-图6D,以及图12A、图12B为电子设备实施本申请实施例提供过的动画效果显示方法后的,界面变化的一组示例性示意图。
其中,图6A与图6D已经在上文中进行过对应的描述,此处不再赘述。
如图12A所示,在接收到用户点击桌面上不属于控件2A01的交互后,或者通过其他交互方式,如“返回(back)”交互手势等后,控件2A01的扩大速度减慢,且移动速度减慢,对应于图7B中“放大速度减慢”。
值得说明的是,由于实际上对动画参数的改变是离散的,可选的,在本申请一些实施例中,并不会出现图7B的“停止变换”。
在T3后T4前,控件2A01的扩大速度减慢,然后开始缩小。控件2A01缩小的过程如图12B以及图12B中“缩小速度增快”所示,控件2A01的速度不断增加直至不变。
其中,控件2A01的变化可以与控件2A01的子控件变化相同。
其中,图12A中的“扩大且扩大速度降低”和图12B中的“缩小且缩小速度先增加”的显示过程为过渡过程。
可以理解的是,图6A至图6D以及图12A、图12B所示的界面变化不仅仅连续,而且一阶可导,使得界面的变化更流畅,能够提升用户的体验。
实现步骤S803有很多种方法,下面以步骤S8031、步骤S8032、步骤S8033示例性的介绍实现步骤S803的一种实施例。
S8031:应用程序的UI线程对动画效果的结束界面执行测量、布局、绘制录制,生成第一渲染树
应用程序的UI线程对动画效果的结束界面执行测量、布局、绘制录制,生成第一渲染树。其中,该第一渲染树对应的界面为结束界面。
S8032:渲染进程或应用程序的UI线程或应用程序的渲染线程,基于动画效果的结束界面、动画效果的持续时间确定动画效果的持续时间内每一帧界面对应的动画参数
渲染进程或应用程序的UI线程或应用程序的渲染线程,基于动画效果的结束界面、动画效果的持续时间、动画效果的起始时间确定动画效果的持续时间内每一帧界面对应的渲染树的动画参数。其中,动画参数可以位于渲染树的渲染属性中,动画参数用于修改视图在界面上的显示方式。
可选的,在本申请一些实施例中,动画参数可以替代需要修改的绘制指令列表才能实现的动画效果,进而使得绘制指令列表在动画效果的持续时间内不用改变,进而不需要UI线程进行测量、布局、绘制录制以更新渲染树。
其中,增加的动画参数包括:宽(BOUDS_WIDTH)、高(BOUNDS_HEIGHT)、位置(BOUNDS_POSITION)、锚点(PIVOT)、圆角(Roundcorner)、2D变换(TRANSLATE)、3D变换(RATATION_3D)、Z坐标(POSITION_Z)、背景颜色(BACKGROUND_COLOR)、前景颜色(FOREGROUND_COLOR)、边框颜色(BORDER_COLOR)、边框宽度(BORDER_WIDTH)、透明度(ALPHA)、内容矩形(FRAME_WIDTH、FRAME_HEIGHT)、内容自适应模式(Gravity)、背景滤镜(BACKGROUND_FILTER)、内容滤镜(CONTENT_FILTER)、背景和内容滤镜(Filter)、阴影颜色(SHADOW_COLOR)、阴影偏移(SHADOW_OFFSET_X、SHADOW_OFFSET_Y),阴影透明度(SHADOW_ALPHA)、阴影半径(SHADOW_RADIUS)、阴影路径(SHADOW_PATH)、遮罩(MASK)。
可选的,在本申请一些实施例中,可以由UI线程执行步骤S8032。
由于动画参数位于渲染树的渲染属性中,直接影响视图在界面上的显示方式,故可以通过使得动画参数连续或一阶可导或二阶可导,使得动画过程中的视图属性连续或一阶可导或二阶可导。其中,动画参数的确定可以参考上文中图9和图10对应的文字描述,此处不再赘述。
由于通过修改动画参数实现界面的变化,而无需应用程序的UI线程进行测量、布局、绘制录制,故在动画过程中,应用程序的UI线程可以不处理该动画相关的操作,如处理动画事件,如更新视图属性,如测量、布局、绘制录制等。其中,UI线程与渲染线程或渲染进程的分工可以参考下文中(a)确定动画参数的数据流程中的内容,此处不再赘述。
由于在动画过程中,应用程序的UI线程与渲染线程在动画的实现过程中彼此独立,故应用程序的UI线程在接收到垂直同步信号(Vsync-APP)后通知渲染线程进行动画参数的更新;或者由渲染进程独立的请求垂直同步信号(Vsync-Render),该垂直同步信号(Vsync-Render)与垂直同步信号(Vsync-APP)的频率可以不一样等等。渲染线程或渲染进程开始更新动画参数的时机可以参考下文中(b)渲染线程或渲染进程更新动画参数的时机中的内容,此处不再赘述。其中,为了区别不同线程或进程接收到的垂直同步信号,以垂直同步信号(Vsync-APP)指代UI线程接收的垂直同步信号,以垂直同步信号(Vsync-Render)指代渲染线程或渲染进程接收的垂直同步信号。
下面分别的介绍(a)渲染线程或渲染进程更新渲染树的时机、(b)绘制指令列表的修改。
(a)渲染线程或渲染进程更新渲染树的时机
图13A、图13B、图13C为本申请实施例提供的渲染线程或渲染进程更新渲染树的时机的一个示例性示意图。
渲染线程或渲染进程更新渲染树的时机可以如图13A、如图13B、如图13C所示。
如图13A所示,首先,UI线程执行步骤S1301:接收到垂直同步信号(Vsync-APP)后处理动画事件。其次,UI线程执行步骤S1302:确定动画效果的最终界面和动画效果的持续时间。然后,UI线程执行步骤S1303:发送动画效果的最终界面、动画效果的持续时长。最后,渲染进程或应用程序的渲染线程执行步骤S1304,更新渲染树。
如图13B所示,首先,UI线程执行步骤S1305:接收垂直同步信号(Vsync-APP);然后,UI线程执行步骤S1306:转发垂直同步信号或其他表示触发时机的参数;最后,渲染进程或应用程序的渲染线程执行步骤S1304,更新渲染树。
如图13C所示,渲染进程或应用程序的渲染线程执行步骤S1307:接收垂直同步信号(Vsync-Render);然后渲染进程或应用程序的渲染线程执行步骤S1304:更新渲染树。
其中,在动画效果的第一帧界面的生成过程中,渲染线程或渲染进程更新渲染树的时机可以如图13A所示;在动画效果的非第一帧界面的生成过程中,渲染线程或渲染进程更新渲染树的时机可以如图13A、图13B或图13C所示。
值得说明的是,在应用程序的UI线程传递数据给渲染进程的情况下,需要通过进程间通信(InterProcess Communication,IPC)完成数据交互,应用程序可以通过如Binder、AIDL、共享内存、Socket等方式实现IPC通信,在此不作限定。
图14为本申请实施例提供的渲染线程更新动画参数时机的另一个示例性示意图。
如图14所示,在动画过程中,渲染线程可以独立的请求垂直同步信号(Vsync-APP),在接收到垂直同步信号(Vsync-APP)的T-Delay时间内,UI线程由于阻塞或者其他原因,没有向渲染线程传递更新渲染树的信息,渲染线程在T-Delay时间后,开始更新渲染树,生成界面;在接收到垂直同步信号(Vsync-APP)的T-Delay时间内,UI线程处理输入事件或者其他逻辑(可以不包括处理动画事件),可以向渲染线程传递更新渲染树的信息,渲染线程在接收到更新渲染树的信息后,更新渲染树,生成界面。
可以理解的是,为渲染线程配置一个延迟T-Delay,有助于在实现动画的同时,快速生成非动画逻辑导致变化的变化后的界面。
其中,T-Delay的值可以小于垂直同步信号的周期,也可以大于等于垂直同步信号的周期。
可选的,在本申请一些实施例中,渲染线程可以滞后UI线程一个或多个垂直同步信号(Vsync-APP)去更新动画参数、生成界面。可以理解的是,在该情况下,当渲染线程滞后UI线程一个或多个垂直同步信号(Vsync-APP)去更新动画参数后,可能会导致动画的延时开始,但是受益于单帧界面生成的最大处理时长提高,有助于减少掉帧的概率。
渲染进程更新动画参数的时机与渲染线程更新动画参数的时机不同,渲染进程独立的请求垂直同步信号(Vsync-Render),垂直同步信号(Vsync-Render)与垂直同步信号(Vsync-APP)的频率、时间可以不同,可以相同。
(b)绘制指令列表的修改
可选的,在本申请的一些实施例中,在动画效果的开始前界面与动画效果的结束界面的绘制指令列表不同的情况下,从动画效果的第一帧开始到动画效果的结束界面,以动画效果的结束界面对应的渲染树为基准,通过修改该渲染树的动画参数生成界面,如下文的(i)不修改绘制指令列表的动画效果过程。
可选的,在本申请一些实施例中,在动画效果的开始前界面与动画效果的结束界面的绘制指令列表不同的情况下,从动画效果的第一帧开始到动画效果的结束界面,以动画效果的开始前界面对应的渲染树为基准,通过修改该渲染树的动画参数生成界面,如下文的(i)不修改绘制指令列表的动画效果过程。
可选的,在本申请一些实施例中,在动画效果的开始前界面与动画效果的结束界面的绘制指令列表不同的情况下,可以由渲染线程或渲染进程修改绘制指令列表中的绘制操作,以及渲染树中的动画效果参数生成界面,如下文的(ii)修改绘制指令列表的动画效果过程。
其中,在本申请一些实施例中,当应用程序的界面包括文本视图(textview)或图像视图(imageview)时,动画效果的开始前界面与动画效果的结束界面的绘制指令列表可以不同。
(i)不修改绘制指令列表的动画效果过程
在动画效果的结束界面和动画效果的开始前界面的绘制内容不一样,进而导致绘制指令列表不一样。本申请实施例提供的动画效果显示方法中,以最终界面的渲染树的绘制指令列表为准,通过修改动画参数以更新渲染树,进而生成界面,实现如图15A、图15B所示的界面。
图15A、图15B为本申请实施例提供的动画效果过程的一个示例性示意图。
如图15A所示,在动画效果的开始前界面包括控件1501,控件1501上承载有文字“请输入账号”,则控件可以包括文本视图1和矩形视图,文本视图1上承载有文字“请输入账号”,且文本视图1与控件1501的大小相同。
其中,文本视图1对应的绘制指令列表中的绘制操作为drawText(请输入账号)。
当控件1501被配置有动画效果后,在动画效果的结束界面,控件1501的宽度变短,文字“请输入账号”变为两行,第一行为“请输入”,第二行为“账号”。即,控件1501包括文本视图1,文本视图1承载有“请输入”和“账号”。
其中,文本视图1对应的绘制指令列表中的绘制操作为drawText(请输入)和drawText(账号)。
由于更新绘制指令列表需要UI线程对界面进行实时的测量、布局、绘制录制,为了避免在动画效果过程中更新绘制指令列表,故,在动画效果的第一帧界面到动画效果的结束界面,以结束界面的渲染树作为动画效果参数更新、生成界面的渲染树,具体的如图15B所示。
如图15B所示,在动画效果的持续时间内,即使控件1501的宽度足够在一行容纳文字“请输入账号”,“请输入账号”仍然以两行文字呈现,分别为“请输入”、“账号”。在该情况下,在动画效果的持续时间内,控件1501对应的渲染节点为渲染节点2,渲染节点2的绘制指令列表中包括的绘制操作为:“drawText(请输入)和drawText(账号)”。
即,在动画效果过程中,绘制指令列表没有发生变化,渲染线程或渲染进程修改动画效果参数生成如图15B所示的界面,控件1501的宽度逐渐变小,文字始终分为两行。
(ii)修改绘制指令列表的动画效果过程
在动画效果的结束界面和动画效果的开始前界面的绘制内容不一样,进而导致绘制指令列表不一样。本申请实施例提供的动画效果显示方法在生成界面的过程中,不断修改绘制指令列表中的绘制操作,以及修改动画效果参数实现生成界面,实现如图16A、图16B所示的界面。
图16A、图16B、图16C、图16D、图16E为本申请实施例提供的动画效果过程的一个示例性示意图。
如图16A所示,动画效果的开始前界面包括控件1601,控件1601上承载有图片1,其中,控件1601可以为一个图像视图。
其中,让控件1601上显示图片1对应的绘制指令列表中的绘制操作为drawBitmap(图片1,src,dst1),其中图片1为源图像,scr指示源图像需要显示的区域,dst1指示将图片1中的scr绘制在控件1601上的什么区域。
当控件1601被配置有动画效果后,在动画效果的结束界面,控件1601的宽度变小,图像视图1的宽度同比例变小。图像视图1对应的绘制指令列表中的绘制操作为drawBitmap(图片1,src,dstN)。
例如,dst1=Rect(10,20,150,200),其中(10,20)矩形的左上角的坐标,(150,100)为矩形的右下角的坐标;dstN=Rect(10,20,150,100)。
在动画效果的过程中,由渲染线程或渲染进程更新控件1601对应的绘制操作,实现如图16B所示的界面。
如图16B所示,在动画效果过程中,渲染线程或渲染进程每一帧都修改渲染树中的绘制操作以及动画效果参数,进而使得动画效果过程中图像视图1宽度不断减少。渲染线程或渲染进程修改绘制操作如:drawBitmap(图片1,src,dst2)、…、drawBitmap(图片1,src,dstN)。
值得说明的是,图片的处理策略影响渲染线程或渲染进程对绘制操作的修改方式。图片的处理策略可以包括:CENTER(图片居中显示,图片尺寸超过承载图片的视图的尺寸,则裁切图片),CENTER_INSIDE(按比例调整图片尺寸,使得图片完整并且居中显示在承载图片的视图中),FIT_CENTER(按比例调整图片尺寸,使得图片不大于承载图片的视图的尺寸,且居中显示),FIT_END(按比例调整图片尺寸,使得图片不大于承载图片的视图的尺寸,且居下显示),FIT_START(按比例调整图片尺寸,使得图片不大于承载图片的视图的尺寸,且居上显示),FIT_XY(不按比例调整图片尺寸,使得图片不大于承载图片的视图的尺寸)等,在此不作限定。
其中,上述CENTER、CENTER_INSIDE、FIT_CENTER、FIT_END、FIT_START、FIT_XY,可以通过修改绘制操作drawBitmap中的dst、src参数实现。
如图16C和图16D所示,通过修改绘制指令列表中的绘制操作对控件上承载的图片进行缩放或者裁剪,进而适应控件的尺寸变化。
如图16C所示,控件1602中承载有图像1,其中,当控件的尺寸变小时,可以按照控件尺寸的变化比例去缩放图片,如上文中的CENTER_INSIDE。
或者,如图16D所示,其中,当控件的尺寸变小时,可以按照控件尺寸的变化比例去裁剪图片。或者,如图16E所示,其中,当据当控件的尺寸变大时,可以先基于将图像1放大至动画效果的结束界面的大小,然后依据控件的尺寸进行裁切,实现如图16E所示的动画效果。
综上,渲染线程或渲染进程可以根据控件尺寸的变化,通过修改绘制指令列表中的绘制操作,对控件上承载的图像或其他内容进行裁切,实现连续的界面的变化。
S8033:渲染进程或应用程序的渲染线程,基于动画参数更新渲染树,并基于更新后的渲染树生成位图
渲染线程或渲染进程在获取到已经更新动画参数的渲染树后,可以遍历渲染树,在画布上遍历执行绘制指令列表中的绘制操作,并在每次执行绘制操作时,结合渲染节点的渲染属性,调整绘制操作的参数或者调整绘制操作对应的图形处理库调用,进而生成位图。
在本申请一些实施例中,渲染进程或渲染线程可以调用GPU绘制生成位图;或者,在本申请一些实施例中,渲染进程或渲染线程可以调用CPU绘制生成位图。
位图会被渲染进程或表面合成器(SurfaceFlinger获取),在图层合成后生成界面。
S804:可选的,渲染进程或应用程序的渲染线程,向应用程序的UI线程同步视图的属性
在生成界面后,由于在动画过程中,UI线程并不感知界面上控件的实际位置、大小,可选的,在本申请一些实施例中,渲染线程或渲染进程可以将控件的位置和大小发送给应用程序的UI线程。其中,可以通过渲染树这种数据结构传递控件的位置和大小,在此不作限定。
图17为本申请实施例提供的UI线程数据确定视图属性的一个示例性示意图。
如图17所示,UI线程数据确定视图属性的步骤包括:
S1701:确定并传递用于更新渲染树的信息
应用程序的UI线程在确定用于更新渲染树的信息后,可以向渲染进程或应用程序的渲染线程传递用于更新渲染树的信息,如动画效果的持续时间内每一帧界面渲染树的动画参数。
在动画效果的第一帧,应用程序的UI线程向渲染线程或渲染进程传递用于更新动画参数的信息,如动画效果的持续时间、动画对象、动画效果的结束界面等。
在动画效果的显示过程中,不包括动画的第一帧,应用程序的UI线程可以不向渲染线程或渲染进程传递用于更新动画参数的信息。
在动画效果的显示过程中,不包括动画的第一帧,应用程序的UI线程可以向渲染线程或渲染进程传递由输入事件或其他UI线程中的逻辑(不包括动画事件)更改后的渲染树。
S1702:确定并传递视图的属性
在动画效果的显示过程中,渲染线程或渲染进程基于渲染树确定视图的属性,如大小和位置,并将视图的大小和属性传递给应用程序的UI线程,进而使得应用程序的UI线程可以确定视图的位置和大小。
可选的,在本申请一些实施例中,渲染线程或渲染进程可以响应于应用程序的UI线程的请求,将视图的位置和大小以及其他属性传递给应用程序的UI线程。
可以理解的是,在动画效果的显示过程中,不需要应用程序的UI线程通过测量、布局、绘制就确定视图的属性,降低了应用程序UI线程的负载。
最后,下面以图18A、图18B、图18C所示的内容,示例性得介绍图3和图4所示的两种动画效果显示方式的区别。
图18A为本申请实施例提供的图3所示方法执行过程中渲染树变化的一个示例性示意图。
如图18A所示,在动画效果1开始前,应用程序的渲染线程中存有渲染树1,应用程序的界面中控件1A01为20像素的正方形。
在动画效果1开始后,应用程序的UI线程接收到垂直同步信号1,确定动画效果1的第一帧界面中的控件1A01的大小为25像素*25像素,然后生成动画效果1的第一帧界面对应的渲染树2,并将渲染树2同步到应用程序的渲染线程中。渲染线程基于渲染树2生成位图,位图中的控件1A01的大小为25像素*25像素。
然后,UI线程接收到垂直同步信号2后,定动画效果1的第一帧界面中的控件1A01的大小为30像素*30像素,生成动画效果1的第二帧界面对应的渲染树3,并将渲染树3同步到应用程序的渲染线程中。渲染线程基于渲染树2生成位图,位图中的控件1A01的大小为30像素*30像素。
图18B、图18C为本申请实施例提供的图4所示方法执行过程中渲染树变化的一个示例性示意图。
如图18B所示,在动画效果前,应用程序的渲染线程中存有渲染树1,应用程序的界面中控件1A01为20像素的正方形。
在动画效果1开始后,应用程序的UI线程接收到垂直同步信号1,确定动画效果1的逻辑为:控件1A01每帧变大5像素,最后变为100像素*像素,并基于动画效果1的结束界面生成渲染树2。然后将动画效果1的逻辑和渲染树2传递给渲染进程或应用程序的渲染线程,渲染进程或应用程序的渲染线程基于动画效果1的逻辑更新渲染树2,并基于更新后的渲染树2生成位图,该位图中的控件1A01的大小为25像素*25像素。
然后,在接受到垂直同步信号2后,渲染进程或应用程序的渲染线程基于动画效果1的逻辑更新渲染树2,并基于更新后的渲染树2生成位图,该位图中的控件1A01的大小为30像素*30像素。
如图18C所示,与图18B不同的是,渲染进程或应用程序的渲染线程基于动画效果1的逻辑更新渲染树1,其中渲染树1对应的界面中控件1A01的大小为20像素*20像素。
(3)本申请实施例提供的电子设备
首先,介绍本申请实施例提供的电子设备的硬件架构。
图19为本申请实施例提供的电子设备硬件架构的一个示例性示意图。
电子设备可以是手机、平板电脑、桌面型计算机、膝上型计算机、手持计算机、笔记本电脑、超级移动个人计算机(ultra-mobile personal computer,UMPC)、上网本,以及蜂窝电话、个人数字助理(personal digital assistant,PDA)、增强现实(augmentedreality,AR)设备、虚拟现实(virtual reality,VR)设备、人工智能(artificialintelligence,AI)设备、可穿戴式设备、车载设备、智能家居设备和/或智慧城市设备,本申请实施例对该电子设备的具体类型不作特殊限制。
电子设备可以包括处理器110,外部存储器接口120,内部存储器121,通用串行总线(universal serial bus,USB)接口130,充电管理模块140,电源管理模块141,电池142,天线1,天线2,移动通信模块150,无线通信模块160,音频模块170,扬声器170A,受话器170B,麦克风170C,耳机接口170D,传感器模块180,按键190,马达191,指示器192,摄像头193,显示屏194,以及用户标识模块(subscriber identification module,SIM)卡接口195等。其中传感器模块180可以包括压力传感器180A,陀螺仪传感器180B,气压传感器180C,磁传感器180D,加速度传感器180E,距离传感器180F,接近光传感器180G,指纹传感器180H,温度传感器180J,触摸传感器180K,环境光传感器180L,骨传导传感器180M等。
可以理解的是,本发明实施例示意的结构并不构成对电子设备的具体限定。在本申请另一些实施例中,电子设备可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件,软件或软件和硬件的组合实现。
处理器110可以包括一个或多个处理单元,例如:处理器110可以包括应用处理器(application processor,AP),调制解调处理器,图形处理器(graphics processingunit,GPU),图像信号处理器(image signal processor,ISP),控制器,视频编解码器,数字信号处理器(digital signal processor,DSP),基带处理器,和/或神经网络处理器(neural-network processing unit,NPU)等。其中,不同的处理单元可以是独立的器件,也可以集成在一个或多个处理器中。
控制器可以根据指令操作码和时序信号,产生操作控制信号,完成取指令和执行指令的控制。
处理器110中还可以设置存储器,用于存储指令和数据。在一些实施例中,处理器110中的存储器为高速缓冲存储器。该存储器可以保存处理器110刚用过或循环使用的指令或数据。如果处理器110需要再次使用该指令或数据,可从所述存储器中直接调用。避免了重复存取,减少了处理器110的等待时间,因而提高了系统的效率。
在一些实施例中,处理器110可以包括一个或多个接口。接口可以包括集成电路(inter-integrated circuit,I2C)接口,集成电路内置音频(inter-integrated circuitsound,I2S)接口,脉冲编码调制(pulse code modulation,PCM)接口,通用异步收发传输器(universal asynchronous receiver/transmitter,UART)接口,移动产业处理器接口(mobile industry processor interface,MIPI),通用输入输出(general-purposeinput/output,GPIO)接口,用户标识模块(subscriber identity module,SIM)接口,和/或通用串行总线(universal serial bus,USB)接口等。
I2C接口是一种双向同步串行总线,包括一根串行数据线(serial data line,SDA)和一根串行时钟线(derail clock line,SCL)。在一些实施例中,处理器110可以包含多组I2C总线。处理器110可以通过不同的I2C总线接口分别耦合触摸传感器180K,充电器,闪光灯,摄像头193等。例如:处理器110可以通过I2C接口耦合触摸传感器180K,使处理器110与触摸传感器180K通过I2C总线接口通信,实现电子设备的触摸功能。
I2S接口可以用于音频通信。在一些实施例中,处理器110可以包含多组I2S总线。处理器110可以通过I2S总线与音频模块170耦合,实现处理器110与音频模块170之间的通信。在一些实施例中,音频模块170可以通过I2S接口向无线通信模块160传递音频信号,实现通过蓝牙耳机接听电话的功能。
PCM接口也可以用于音频通信,将模拟信号抽样,量化和编码。在一些实施例中,音频模块170与无线通信模块160可以通过PCM总线接口耦合。在一些实施例中,音频模块170也可以通过PCM接口向无线通信模块160传递音频信号,实现通过蓝牙耳机接听电话的功能。所述I2S接口和所述PCM接口都可以用于音频通信。
UART接口是一种通用串行数据总线,用于异步通信。该总线可以为双向通信总线。它将要传输的数据在串行通信与并行通信之间转换。在一些实施例中,UART接口通常被用于连接处理器110与无线通信模块160。例如:处理器110通过UART接口与无线通信模块160中的蓝牙模块通信,实现蓝牙功能。在一些实施例中,音频模块170可以通过UART接口向无线通信模块160传递音频信号,实现通过蓝牙耳机播放音乐的功能。
MIPI接口可以被用于连接处理器110与显示屏194,摄像头193等外围器件。MIPI接口包括摄像头串行接口(camera serial interface,CSI),显示屏串行接口(displayserial interface,DSI)等。在一些实施例中,处理器110和摄像头193通过CSI接口通信,实现电子设备的拍摄功能。处理器110和显示屏194通过DSI接口通信,实现电子设备的显示功能。
GPIO接口可以通过软件配置。GPIO接口可以被配置为控制信号,也可被配置为数据信号。在一些实施例中,GPIO接口可以用于连接处理器110与摄像头193,显示屏194,无线通信模块160,音频模块170,传感器模块180等。GPIO接口还可以被配置为I2C接口,I2S接口,UART接口,MIPI接口等。
USB接口130是符合USB标准规范的接口,具体可以是Mini USB接口,Micro USB接口,USB Type C接口等。USB接口130可以用于连接充电器为电子设备充电,也可以用于电子设备与外围设备之间传输数据。也可以用于连接耳机,通过耳机播放音频。该接口还可以用于连接其他电子设备,例如AR设备等。
可以理解的是,本发明实施例示意的各模块间的接口连接关系,只是示意性说明,并不构成对电子设备的结构限定。在本申请另一些实施例中,电子设备也可以采用上述实施例中不同的接口连接方式,或多种接口连接方式的组合。
充电管理模块140用于从充电器接收充电输入。其中,充电器可以是无线充电器,也可以是有线充电器。在一些有线充电的实施例中,充电管理模块140可以通过USB接口130接收有线充电器的充电输入。在一些无线充电的实施例中,充电管理模块140可以通过电子设备的无线充电线圈接收无线充电输入。充电管理模块140为电池142充电的同时,还可以通过电源管理模块141为电子设备供电。
电源管理模块141用于连接电池142,充电管理模块140与处理器110。电源管理模块141接收电池142和/或充电管理模块140的输入,为处理器110,内部存储器121,显示屏194,摄像头193,和无线通信模块160等供电。电源管理模块141还可以用于监测电池容量,电池循环次数,电池健康状态(漏电,阻抗)等参数。在其他一些实施例中,电源管理模块141也可以设置于处理器110中。在另一些实施例中,电源管理模块141和充电管理模块140也可以设置于同一个器件中。
电子设备的无线通信功能可以通过天线1,天线2,移动通信模块150,无线通信模块160,调制解调处理器以及基带处理器等实现。
天线1和天线2用于发射和接收电磁波信号。电子设备中的每个天线可用于覆盖单个或多个通信频带。不同的天线还可以复用,以提高天线的利用率。例如:可以将天线1复用为无线局域网的分集天线。在另外一些实施例中,天线可以和调谐开关结合使用。
移动通信模块150可以提供应用在电子设备上的包括2G/3G/4G/5G等无线通信的解决方案。移动通信模块150可以包括至少一个滤波器,开关,功率放大器,低噪声放大器(low noise amplifier,LNA)等。移动通信模块150可以由天线1接收电磁波,并对接收的电磁波进行滤波,放大等处理,传送至调制解调处理器进行解调。移动通信模块150还可以对经调制解调处理器调制后的信号放大,经天线1转为电磁波辐射出去。在一些实施例中,移动通信模块150的至少部分功能模块可以被设置于处理器110中。在一些实施例中,移动通信模块150的至少部分功能模块可以与处理器110的至少部分模块被设置在同一个器件中。
调制解调处理器可以包括调制器和解调器。其中,调制器用于将待发送的低频基带信号调制成中高频信号。解调器用于将接收的电磁波信号解调为低频基带信号。随后解调器将解调得到的低频基带信号传送至基带处理器处理。低频基带信号经基带处理器处理后,被传递给应用处理器。应用处理器通过音频设备(不限于扬声器170A,受话器170B等)输出声音信号,或通过显示屏194显示图像或视频。在一些实施例中,调制解调处理器可以是独立的器件。在另一些实施例中,调制解调处理器可以独立于处理器110,与移动通信模块150或其他功能模块设置在同一个器件中。
无线通信模块160可以提供应用在电子设备上的包括无线局域网(wirelesslocal area networks,WLAN)(如无线保真(wireless fidelity,Wi-Fi)网络),蓝牙(bluetooth,BT),全球导航卫星系统(global navigation satellite system,GNSS),调频(frequency modulation,FM),近距离无线通信技术(near field communication,NFC),红外技术(infrared,IR)等无线通信的解决方案。无线通信模块160可以是集成至少一个通信处理模块的一个或多个器件。无线通信模块160经由天线2接收电磁波,将电磁波信号调频以及滤波处理,将处理后的信号发送到处理器110。无线通信模块160还可以从处理器110接收待发送的信号,对其进行调频,放大,经天线2转为电磁波辐射出去。
在一些实施例中,电子设备的天线1和移动通信模块150耦合,天线2和无线通信模块160耦合,使得电子设备可以通过无线通信技术与网络以及其他设备通信。所述无线通信技术可以包括全球移动通讯系统(global system for mobile communications,GSM),通用分组无线服务(general packet radio service,GPRS),码分多址接入(code divisionmultiple access,CDMA),宽带码分多址(wideband code division multiple access,WCDMA),时分码分多址(time-division code division multiple access,TD-SCDMA),长期演进(long term evolution,LTE),BT,GNSS,WLAN,NFC,FM,和/或IR技术等。所述GNSS可以包括全球卫星定位系统(global positioning system,GPS),全球导航卫星系统(globalnavigation satellite system,GLONASS),北斗卫星导航系统(beidou navigationsatellite system,BDS),准天顶卫星系统(quasi-zenith satellite system,QZSS)和/或星基增强系统(satellite based augmentation systems,SBAS)。
电子设备通过GPU,显示屏194,以及应用处理器等实现显示功能。GPU为图像处理的微处理器,连接显示屏194和应用处理器。GPU用于执行数学和几何计算,用于图形渲染。处理器110可包括一个或多个GPU,其执行程序指令以生成或改变显示信息。
显示屏194用于显示图像,视频等。显示屏194包括显示面板。显示面板可以采用液晶显示屏(liquid crystal display,LCD)。显示面板还可以采用有机发光二极管(organiclight-emitting diode,OLED),有源矩阵有机发光二极体或主动矩阵有机发光二极体(active-matrix organic light emitting diode,AMOLED),柔性发光二极管(flexlight-emitting diode,FLED),miniled,microled,micro-oled,量子点发光二极管(quantum dot light emitting diodes,QLED)等制造。在一些实施例中,电子设备可以包括1个或N个显示屏194,N为大于1的正整数。
电子设备可以通过ISP,摄像头193,视频编解码器,GPU,显示屏194以及应用处理器等实现拍摄功能。
ISP用于处理摄像头193反馈的数据。例如,拍照时,打开快门,光线通过镜头被传递到摄像头感光元件上,光信号转换为电信号,摄像头感光元件将所述电信号传递给ISP处理,转化为肉眼可见的图像。ISP还可以对图像的噪点,亮度,颜色进行算法优化。ISP还可以对拍摄场景的曝光,色温等参数优化。在一些实施例中,ISP可以设置在摄像头193中。
摄像头193用于捕获静态图像或视频。物体通过镜头生成光学图像投射到感光元件。感光元件可以是电荷耦合器件(charge coupled device,CCD)或互补金属氧化物半导体(complementary metal-oxide-semiconductor,CMOS)光电晶体管。感光元件把光信号转换成电信号,之后将电信号传递给ISP转换成数字图像信号。ISP将数字图像信号输出到DSP加工处理。DSP将数字图像信号转换成标准的RGB,YUV等格式的图像信号。在一些实施例中,电子设备可以包括1个或N个摄像头193,N为大于1的正整数。
数字信号处理器用于处理数字信号,除了可以处理数字图像信号,还可以处理其他数字信号。例如,当电子设备在频点选择时,数字信号处理器用于对频点能量进行傅里叶变换等。
视频编解码器用于对数字视频压缩或解压缩。电子设备可以支持一种或多种视频编解码器。这样,电子设备可以播放或录制多种编码格式的视频,例如:动态图像专家组(moving picture experts group,MPEG)1,MPEG2,MPEG3,MPEG4等。
NPU为神经网络(neural-network,NN)计算处理器,通过借鉴生物神经网络结构,例如借鉴人脑神经元之间传递模式,对输入信息快速处理,还可以不断的自学习。通过NPU可以实现电子设备的智能认知等应用,例如:图像识别,人脸识别,语音识别,文本理解等。
内部存储器121可以包括一个或多个随机存取存储器(random access memory,RAM)和一个或多个非易失性存储器(non-volatile memory,NVM)。
随机存取存储器可以包括静态随机存储器(static random-access memory,SRAM)、动态随机存储器(dynamic random access memory,DRAM)、同步动态随机存储器(synchronous dynamic random access memory,SDRAM)、双倍资料率同步动态随机存取存储器(double data rate synchronous dynamic random access memory,DDR SDRAM,例如第五代DDR SDRAM一般称为DDR5 SDRAM)等;
非易失性存储器可以包括磁盘存储器件、快闪存储器(flash memory)。
快闪存储器按照运作原理划分可以包括NOR FLASH、NAND FLASH、3D NAND FLASH等,按照存储单元电位阶数划分可以包括单阶存储单元(single-level cell,SLC)、多阶存储单元(multi-level cell,MLC)、三阶储存单元(triple-level cell,TLC)、四阶储存单元(quad-level cell,QLC)等,按照存储规范划分可以包括通用闪存存储(英文:universalflash storage,UFS)、嵌入式多媒体存储卡(embedded multi media Card,eMMC)等。
随机存取存储器可以由处理器110直接进行读写,可以用于存储操作系统或其他正在运行中的程序的可执行程序(例如机器指令),还可以用于存储用户及应用程序的数据等。
非易失性存储器也可以存储可执行程序和存储用户及应用程序的数据等,可以提前加载到随机存取存储器中,用于处理器110直接进行读写。
外部存储器接口120可以用于连接外部的非易失性存储器,实现扩展电子设备的存储能力。外部的非易失性存储器通过外部存储器接口120与处理器110通信,实现数据存储功能。例如将音乐,视频等文件保存在外部的非易失性存储器中。
电子设备可以通过音频模块170,扬声器170A,受话器170B,麦克风170C,耳机接口170D,以及应用处理器等实现音频功能。例如音乐播放,录音等。
音频模块170用于将数字音频信息转换成模拟音频信号输出,也用于将模拟音频输入转换为数字音频信号。音频模块170还可以用于对音频信号编码和解码。在一些实施例中,音频模块170可以设置于处理器110中,或将音频模块170的部分功能模块设置于处理器110中。
扬声器170A,也称“喇叭”,用于将音频电信号转换为声音信号。电子设备可以通过扬声器170A收听音乐,或收听免提通话。
受话器170B,也称“听筒”,用于将音频电信号转换成声音信号。当电子设备接听电话或语音信息时,可以通过将受话器170B靠近人耳接听语音。
麦克风170C,也称“话筒”,“传声器”,用于将声音信号转换为电信号。当拨打电话或发送语音信息时,用户可以通过人嘴靠近麦克风170C发声,将声音信号输入到麦克风170C。电子设备可以设置至少一个麦克风170C。在另一些实施例中,电子设备可以设置两个麦克风170C,除了采集声音信号,还可以实现降噪功能。在另一些实施例中,电子设备还可以设置三个,四个或更多麦克风170C,实现采集声音信号,降噪,还可以识别声音来源,实现定向录音功能等。
耳机接口170D用于连接有线耳机。耳机接口170D可以是USB接口130,也可以是3.5mm的开放移动电子设备平台(open mobile terminal platform,OMTP)标准接口,美国蜂窝电信工业协会(cellular telecommunications industry association of the USA,CTIA)标准接口。
压力传感器180A用于感受压力信号,可以将压力信号转换成电信号。在一些实施例中,压力传感器180A可以设置于显示屏194。压力传感器180A的种类很多,如电阻式压力传感器,电感式压力传感器,电容式压力传感器等。电容式压力传感器可以是包括至少两个具有导电材料的平行板。当有力作用于压力传感器180A,电极之间的电容改变。电子设备根据电容的变化确定压力的强度。当有触摸操作作用于显示屏194,电子设备根据压力传感器180A检测所述触摸操作强度。电子设备也可以根据压力传感器180A的检测信号计算触摸的位置。在一些实施例中,作用于相同触摸位置,但不同触摸操作强度的触摸操作,可以对应不同的操作指令。例如:当有触摸操作强度小于第一压力阈值的触摸操作作用于短消息应用图标时,执行查看短消息的指令。当有触摸操作强度大于或等于第一压力阈值的触摸操作作用于短消息应用图标时,执行新建短消息的指令。
陀螺仪传感器180B可以用于确定电子设备的运动姿态。在一些实施例中,可以通过陀螺仪传感器180B确定电子设备围绕三个轴(即,x,y和z轴)的角速度。陀螺仪传感器180B可以用于拍摄防抖。示例性的,当按下快门,陀螺仪传感器180B检测电子设备抖动的角度,根据角度计算出镜头模组需要补偿的距离,让镜头通过反向运动抵消电子设备的抖动,实现防抖。陀螺仪传感器180B还可以用于导航,体感游戏场景。
气压传感器180C用于测量气压。在一些实施例中,电子设备通过气压传感器180C测得的气压值计算海拔高度,辅助定位和导航。
磁传感器180D包括霍尔传感器。电子设备可以利用磁传感器180D检测翻盖皮套的开合。在一些实施例中,当电子设备是翻盖机时,电子设备可以根据磁传感器180D检测翻盖的开合。进而根据检测到的皮套的开合状态或翻盖的开合状态,设置翻盖自动解锁等特性。
加速度传感器180E可检测电子设备在各个方向上(一般为三轴)加速度的大小。当电子设备静止时可检测出重力的大小及方向。还可以用于识别电子设备姿态,应用于横竖屏切换,计步器等应用。
距离传感器180F,用于测量距离。电子设备可以通过红外或激光测量距离。在一些实施例中,拍摄场景,电子设备可以利用距离传感器180F测距以实现快速对焦。
接近光传感器180G可以包括例如发光二极管(LED)和光检测器,例如光电二极管。发光二极管可以是红外发光二极管。电子设备通过发光二极管向外发射红外光。电子设备使用光电二极管检测来自附近物体的红外反射光。当检测到充分的反射光时,可以确定电子设备附近有物体。当检测到不充分的反射光时,电子设备可以确定电子设备附近没有物体。电子设备可以利用接近光传感器180G检测用户手持电子设备贴近耳朵通话,以便自动熄灭屏幕达到省电的目的。接近光传感器180G也可用于皮套模式,口袋模式自动解锁与锁屏。
环境光传感器180L用于感知环境光亮度。电子设备可以根据感知的环境光亮度自适应调节显示屏194亮度。环境光传感器180L也可用于拍照时自动调节白平衡。环境光传感器180L还可以与接近光传感器180G配合,检测电子设备是否在口袋里,以防误触。
指纹传感器180H用于采集指纹。电子设备可以利用采集的指纹特性实现指纹解锁,访问应用锁,指纹拍照,指纹接听来电等。
温度传感器180J用于检测温度。在一些实施例中,电子设备利用温度传感器180J检测的温度,执行温度处理策略。例如,当温度传感器180J上报的温度超过阈值,电子设备执行降低位于温度传感器180J附近的处理器的性能,以便降低功耗实施热保护。在另一些实施例中,当温度低于另一阈值时,电子设备对电池142加热,以避免低温导致电子设备异常关机。在其他一些实施例中,当温度低于又一阈值时,电子设备对电池142的输出电压执行升压,以避免低温导致的异常关机。
触摸传感器180K,也称“触控器件”。触摸传感器180K可以设置于显示屏194,由触摸传感器180K与显示屏194组成触摸屏,也称“触控屏”。触摸传感器180K用于检测作用于其上或附近的触摸操作。触摸传感器可以将检测到的触摸操作传递给应用处理器,以确定触摸事件类型。可以通过显示屏194提供与触摸操作相关的视觉输出。在另一些实施例中,触摸传感器180K也可以设置于电子设备的表面,与显示屏194所处的位置不同。
骨传导传感器180M可以获取振动信号。在一些实施例中,骨传导传感器180M可以获取人体声部振动骨块的振动信号。骨传导传感器180M也可以接触人体脉搏,接收血压跳动信号。在一些实施例中,骨传导传感器180M也可以设置于耳机中,结合成骨传导耳机。音频模块170可以基于所述骨传导传感器180M获取的声部振动骨块的振动信号,解析出语音信号,实现语音功能。应用处理器可以基于所述骨传导传感器180M获取的血压跳动信号解析心率信息,实现心率检测功能。
按键190包括开机键,音量键等。按键190可以是机械按键。也可以是触摸式按键。电子设备可以接收按键输入,产生与电子设备的用户设置以及功能控制有关的键信号输入。
马达191可以产生振动提示。马达191可以用于来电振动提示,也可以用于触摸振动反馈。例如,作用于不同应用(例如拍照,音频播放等)的触摸操作,可以对应不同的振动反馈效果。作用于显示屏194不同区域的触摸操作,马达191也可对应不同的振动反馈效果。不同的应用场景(例如:时间提醒,接收信息,闹钟,游戏等)也可以对应不同的振动反馈效果。触摸振动反馈效果还可以支持自定义。
指示器192可以是指示灯,可以用于指示充电状态,电量变化,也可以用于指示消息,未接来电,通知等。
SIM卡接口195用于连接SIM卡。SIM卡可以通过插入SIM卡接口195,或从SIM卡接口195拔出,实现和电子设备的接触和分离。电子设备可以支持1个或N个SIM卡接口,N为大于1的正整数。SIM卡接口195可以支持Nano SIM卡,Micro SIM卡,SIM卡等。同一个SIM卡接口195可以同时插入多张卡。所述多张卡的类型可以相同,也可以不同。SIM卡接口195也可以兼容不同类型的SIM卡。SIM卡接口195也可以兼容外部存储卡。电子设备通过SIM卡和网络交互,实现通话以及数据通信等功能。在一些实施例中,电子设备采用eSIM,即:嵌入式SIM卡。eSIM卡可以嵌在电子设备中,不能和电子设备分离。
其次,介绍本申请实施例提供的电子设备的软件架构。
图20为本申请实施例的电子设备软件架构的一个示例性示意图。
如图20所示,分层架构将软件分成若干个层,每一层都有清晰的角色和分工。层与层之间通过软件接口通信。在一些实施例中,将系统分为四层,从上至下分别为应用程序层,应用程序框架层,系统库,以及内核层。
应用程序层可以包括一系列应用程序包。如图20所示,应用程序包可以包括相机,图库,日历,通话,地图,导航,WLAN,蓝牙,音乐,视频,短信息等应用程序(也可以称为应用)。
应用程序框架层为应用程序层的应用程序提供应用编程接口(applicationprogramming interface,API)和编程框架。应用程序框架层包括一些预先定义的函数。
如图20所示,应用程序框架层可以包括窗口管理服务,显示管理服务,内容提供器,视图系统,电话管理器,资源管理器,通知管理器,本地Profile管理助手(LocalProfile Assistant,LPA)等。
窗口管理服务负责窗口的启动、添加、删除等,可以确定窗口上显示的应用程序以及确定应用程序的图层的创建、销毁、属性变更等,判断是否有状态栏,锁定屏幕,截取屏幕等。
显示管理服务可以获取显示区域的数量、大小,以及负责显示区域的启动、添加、删除等。
内容提供器用来存放和获取数据,并使这些数据可以被应用程序访问。所述数据可以包括视频,图像,音频,拨打和接听的电话,浏览历史和书签,电话簿等。
电话管理器用于提供电子设备的通信功能。例如通话状态的管理(包括接通,挂断等)。
资源管理器为应用程序提供各种资源,比如本地化字符串,图标,图片,布局文件,视频文件等等。
通知管理器使应用程序可以在状态栏中显示通知信息,可以用于传达告知类型的消息,可以短暂停留后自动消失,无需用户交互。比如通知管理器被用于告知下载完成,消息提醒等。通知管理器还可以是以图表或者滚动条文本形式出现在系统顶部状态栏的通知,例如后台运行的应用程序的通知,还可以是以对话界面形式出现在屏幕上的通知。例如在状态栏提示文本信息,发出提示音,电子设备振动,指示灯闪烁等。
视图系统包括可视控件,例如显示文字的控件,显示图片的控件等。视图系统可用于构建应用程序。显示界面可以由一个或多个视图组成的。例如,包括短信通知图标的显示界面,可以包括显示文字的视图以及显示图片的视图。
应用程序框架层还可以包括动画系统。
如图20所示,动画系统执行本申请实施例提供的动画效果显示方式包括:
S2001:通过动画接口配置动画效果
动画系统向应用程序的开发者提供动画接口。应用程序的开发者可以通过调用动画接口为任意的一个或多个控件配置动画效果。
S2002:确定动画效果的持续时间、动画效果的结束帧描述信息等
在应用程序开始运行后,接收到动画触发事件后,动画系统可以确定动画效果的持续时间、动画效果的结束帧描述信息等。
S2003:确定动画效果持续时间内的每一帧的描述信息
然后动画系统可以基于动画效果的持续时间、动画效果的结束帧描述信息、动画效果的开始时间和当前要渲染的帧的时间确定当前要渲染的帧的描述信息。其中,当前要渲染的帧的描述信息包括该帧上控件的属性。
S2004:基于每一帧的描述信息更新渲染树
再然后,动画系统基于当前要渲染的帧的描述信息更新渲染树。
最后,将更新后的渲染树传递给底层图形处理库,由底层图形处理库调用GPU或CPU执行具体的绘制操作,生成位图。位图会被显示驱动接收,进而送显。
运行时包括核心库和虚拟机。运行时负责操作系统的调度和管理。
核心库包含两部分:一部分是java语言需要调用的功能函数,另一部分是核心库。
应用程序层和应用程序框架层运行在虚拟机中。虚拟机将应用程序层和应用程序框架层的java文件执行为二进制文件。虚拟机用于执行对象生命周期的管理,堆栈管理,线程管理,安全和异常的管理,以及垃圾回收等功能。
系统库可以包括多个功能模块。例如:表面管理器(surface manager),媒体库(Media Libraries),图形处理库,其中,图形处理库包括:三维图形处理库(例如:OpenGLES),二维图形引擎(例如:SGL)等。
表面管理器用于对显示子系统进行管理,并且为多个应用程序提供了二维(2-Dimensional,2D)和三维(3-Dimensional,3D)图层的融合。
媒体库支持多种常用的音频,视频格式回放和录制,以及静态图像文件等。媒体库可以支持多种音视频编码格式,例如:MPEG4,H.264,MP3,AAC,AMR,JPG,PNG等。
三维图形处理库用于实现3D图形绘图,图像渲染,图层合成,和图层处理等。2D图形引擎是2D绘图的绘图引擎。
内核层是硬件和软件之间的层。内核层至少包含显示驱动,摄像头驱动,音频驱动,传感器驱动,虚拟卡驱动。
上述实施例中所用,根据上下文,术语“当…时”可以被解释为意思是“如果…”或“在…后”或“响应于确定…”或“响应于检测到…”。类似地,根据上下文,短语“在确定…时”或“如果检测到(所陈述的条件或事件)”可以被解释为意思是“如果确定…”或“响应于确定…”或“在检测到(所陈述的条件或事件)时”或“响应于检测到(所陈述的条件或事件)”。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。该计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行该计算机程序指令时,全部或部分地产生按照本申请实施例该的流程或功能。该计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。该计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,该计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线)或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。该计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。该可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如DVD)、或者半导体介质(例如固态硬盘)等。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,该流程可以由计算机程序来指令相关的硬件完成,该程序可存储于计算机可读取存储介质中,该程序在执行时,可包括如上述各方法实施例的流程。而前述的存储介质包括:ROM或随机存储记忆体RAM、磁碟或者光盘等各种可存储程序代码的介质。
Claims (19)
1.一种动画效果显示方法,应用于电子设备,其特征在于,包括:
接收到动画触发事件后,应用程序的UI线程根据所述应用程序设置的第一控件组的第一动画效果的信息确定所述第一动画效果的持续时间、所述第一动画效果的起始时间和所述第一动画效果的结束帧描述信息,所述第一控件组包括一个或多个控件,所述动画触发事件用于触发显示所述第一动画效果;
在所述第一动画效果的持续时间内,在生成目标帧的显示数据时,根据所述第一动画效果的起始时间、所述第一动画效果的持续时间、所述目标帧对应的时间和所述第一动画效果的结束帧描述信息确定所述目标帧的描述信息,所述应用程序的渲染线程或渲染进程根据所述目标帧的描述信息生成所述目标帧的显示数据。
2.根据权利要求1所述的方法,其特征在于,
所述第一动画效果的信息为所述应用程序通过系统提供的动画接口配置的。
3.根据权利要求1或2所述的方法,其特征在于,在所述第一动画效果的持续时间内,在生成目标帧的显示数据时,根据所述第一动画效果的起始时间、所述第一动画效果的持续时间、所述目标帧对应的时间、和所述第一动画效果的结束帧描述信息确定所述目标帧的描述信息,具体包括:
所述UI线程或所述渲染线程或所述渲染进程根据所述第一动画效果的起始时间、所述第一动画效果的持续时间、所述目标帧对应的时间、和所述第一动画效果的结束帧描述信息确定所述目标帧的描述信息。
4.根据权利要求1-3中任一项所述的方法,其特征在于,所述方法还包括:
所述UI线程基于所述第一动画效果的结束帧描述信息确定所述第一动画效果的结束帧中控件的属性;
所述UI线程比较所述第一动画效果的结束帧中控件的属性和所述第一动画效果开始前控件的属性确定第二控件组,所述第二控件组为所述第一动画效果持续时间内属性发生变化的控件,所述第二控件组包括所述第一控件组;
所述第一控件组以所述第一动画效果显示,所述第二控件中除所述第一控件组外的其他控件以第二动画效果显示,所述动画触发事件还用于触发显示所述第二动画效果。
5.根据权利要求4所述的方法,其特征在于,
所述目标帧的描述信息还用于确定所述目标帧中所述第二控件组中控件的属性,控件的属性包括控件的大小、控件的位置、控件的透明度中的至少一种。
6.根据权利要求1-5中任一项所述的方法,其特征在于,所述渲染线程或所述渲染进程根据所述目标帧的描述信息生成所述目标帧的显示数据,具体包括:
所述渲染线程或所述渲染进程根据所述目标帧的描述信息更新第一渲染树,所述渲染线程或所述渲染进程基于更新后的所述第一渲染树生成所述目标帧的显示数据。
7.根据权利要求6所述的方法,其特征在于,所述渲染线程或所述渲染进程根据所述目标帧的描述信息更新第一渲染树,具体包括:
所述渲染线程或所述渲染进程根据所述目标帧中所述第二控件组中控件的属性更新所述第一渲染树。
8.根据权利要求7所述的方法,其特征在于,所述方法还包括:
所述第二控件组包括第三控件;
所述渲染线程或所述渲染进程根据所述第三控件的大小、预配置的策略调整第三控件上承载内容的大小,所述承载的内容包括图像、文字中的至少一种。
9.根据权利要求8所述的方法,其特征在于,
所述第三控件为图像控件ImageView,所述第三控件上承载的内容为第一图像;
所述策略包括:比较第三控件的尺寸和所述第一图像的尺寸的大小,对所述第一图像执行裁剪或缩放。
10.根据权利要求8所述的方法,其特征在于,
所述第三控件为文本控件TextView,所述第三控件上承载的内容为第一文本;
所述策略包括:比较第三控件的宽度和所述第一文本的宽度,对所述第一文本执行分行或合行。
11.根据权利要求6-10中任一项所述的方法,其特征在于,
所述第一渲染树为所述第一动画效果的结束帧对应的渲染树;
或者,所述第一渲染树为所述第一动画效果开始前的界面对应的渲染树。
12.根据权利要求1-11中任一项所述的方法,其特征在于,所述在接收到动画触发事件后,应用程序的UI线程根据所述应用程序设置的第一控件组的第一动画效果的信息确定所述第一动画效果的持续时间、所述第一动画效果的起始时间和所述第一动画效果的结束帧描述信息后,所述方法还包括:
所述UI线程注销所述第一动画效果的动画回调CALLBACK_ANIMATION,所述动画回调用于触发所述UI线程对所述第一控件组中的控件的属性执行修改。
13.根据权利要求1-12中任一项所述的方法,其特征在于,所述方法还包括:
在所述第一动画效果的持续时间内,所述UI线程在第一时刻接收垂直同步信号,所述渲染线程或所述渲染进程在第二时刻基于根据所述目标帧的描述信息生成所述目标帧的显示数据;
所述第二时刻在所述第一时刻的第一时长后,所述第一时长为预设的。
14.根据权利要求1-13中任一项所述的方法,其特征在于,所述方法还包括:
在所述第一动画效果的持续时间内,所述渲染线程或所述渲染进程确定第二参数,所述第二参数包括所述第一控件组中控件的大小和位置;
所述渲染线程或所述渲染进程向所述UI线程发送第二参数;
所述UI线程基于所述第二参数确定所述第一控件组中控件的大小和位置。
15.根据权利要求1-14中任一项所述的方法,其特征在于,所述动画触发事件包括用户的交互、网络状态变化、所述电子设备上其他应用程序向所述应用程序发送的消息中的至少一种。
16.一种电子设备,其特征在于,所述电子设备包括:一个或多个处理器和存储器;
所述存储器与所述一个或多个处理器耦合,所述存储器用于存储计算机程序代码,所述计算机程序代码包括计算机指令,所述一个或多个处理器调用所述计算机指令以使得所述电子设备执行如权利要求1-15中任一项所述的方法。
17.一种芯片系统,所述芯片系统应用于电子设备,所述芯片系统包括一个或多个处理器,所述处理器用于调用计算机指令以使得所述电子设备执行如权利要求1-15中任一项所述的方法。
18.一种计算机可读存储介质,包括指令,其特征在于,当所述指令在电子设备上运行时,使得所述电子设备执行如权利要求1-15中任一项所述的方法。
19.一种计算机程序产品,包括计算机可读指令,所述计算机可读指令当被一个或多个处理器执行时实现如权利要求1-15中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2022/125591 WO2023066177A1 (zh) | 2021-10-18 | 2022-10-17 | 动画效果显示方法及电子设备 |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111209898 | 2021-10-18 | ||
CN202111209898X | 2021-10-18 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115994007A true CN115994007A (zh) | 2023-04-21 |
Family
ID=85989290
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111526945.3A Pending CN115994007A (zh) | 2021-10-18 | 2021-12-14 | 动画效果显示方法及电子设备 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN115994007A (zh) |
WO (1) | WO2023066177A1 (zh) |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7088374B2 (en) * | 2003-03-27 | 2006-08-08 | Microsoft Corporation | System and method for managing visual structure, timing, and animation in a graphics processing system |
CN107729094B (zh) * | 2017-08-29 | 2020-12-29 | 口碑(上海)信息技术有限公司 | 一种用户界面渲染的方法及装置 |
CN109828791B (zh) * | 2018-12-28 | 2022-03-22 | 北京奇艺世纪科技有限公司 | 一种动画播放方法、终端和计算机可读存储介质 |
CN111443914B (zh) * | 2020-03-30 | 2023-07-14 | 北京字节跳动网络技术有限公司 | 动画展示方法以及装置 |
CN112130940B (zh) * | 2020-08-25 | 2023-11-17 | 北京小米移动软件有限公司 | 终端的控制方法、装置、存储介质和电子设备 |
CN112347408B (zh) * | 2021-01-07 | 2021-04-27 | 北京小米移动软件有限公司 | 渲染方法、装置、电子设备及存储介质 |
-
2021
- 2021-12-14 CN CN202111526945.3A patent/CN115994007A/zh active Pending
-
2022
- 2022-10-17 WO PCT/CN2022/125591 patent/WO2023066177A1/zh active Application Filing
Also Published As
Publication number | Publication date |
---|---|
WO2023066177A1 (zh) | 2023-04-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2021027747A1 (zh) | 一种界面显示方法及设备 | |
CN110119296B (zh) | 切换父页面和子页面的方法、相关装置 | |
WO2020093988A1 (zh) | 一种图像处理方法及电子设备 | |
CN113553130B (zh) | 应用执行绘制操作的方法及电子设备 | |
CN112114912A (zh) | 一种用户界面布局方法及电子设备 | |
CN113132526B (zh) | 一种页面绘制方法及相关装置 | |
CN116048933B (zh) | 一种流畅度检测方法 | |
WO2023066165A1 (zh) | 动画效果显示方法及电子设备 | |
CN116483734B (zh) | 一种基于编译器的插桩方法、系统及相关电子设备 | |
CN113448658A (zh) | 截屏处理的方法、图形用户接口及终端 | |
WO2023066177A1 (zh) | 动画效果显示方法及电子设备 | |
WO2024083009A1 (zh) | 界面生成方法及电子设备 | |
WO2024046010A1 (zh) | 一种界面显示方法、设备及系统 | |
WO2024067551A1 (zh) | 界面显示方法及电子设备 | |
CN117221713B (zh) | 参数加载方法和电子设备 | |
WO2024082987A1 (zh) | 界面生成方法及电子设备 | |
WO2024083014A1 (zh) | 界面生成方法及电子设备 | |
CN116795476B (zh) | 一种删除壁纸的方法及电子设备 | |
WO2024061292A1 (zh) | 界面生成方法及电子设备 | |
WO2024037542A1 (zh) | 一种触控输入的方法、系统、电子设备及存储介质 | |
WO2022143891A1 (zh) | 焦点同步方法及电子设备 | |
WO2022143118A1 (zh) | 图片处理方法及电子设备 | |
CN117764853A (zh) | 人脸图像增强方法和电子设备 | |
CN116166257A (zh) | 界面生成方法及电子设备 | |
CN116991532A (zh) | 一种虚拟机窗口的显示方法、电子设备及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |