CN102385515B - 一种基于Android系统的GO图像动画引擎 - Google Patents
一种基于Android系统的GO图像动画引擎 Download PDFInfo
- Publication number
- CN102385515B CN102385515B CN201110322303.1A CN201110322303A CN102385515B CN 102385515 B CN102385515 B CN 102385515B CN 201110322303 A CN201110322303 A CN 201110322303A CN 102385515 B CN102385515 B CN 102385515B
- Authority
- CN
- China
- Prior art keywords
- assembly
- animation
- image
- walker
- 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.)
- Active
Links
Images
Landscapes
- Processing Or Creating Images (AREA)
Abstract
本发明公开了一种基于Android系统的GO图像动画引擎,属于一种适用于Android系统上显示各种动画、图形的绘制装置和方法,包括一组件树和一遍历器,通过遍历器对组件树的遍历更新组件的数据和绘制图形。本发明所述的技术方案能够更快、更好的将动画和图形以非常流畅的速度展现在UI界面上,带来更好的动画效果。
Description
技术领域
本发明涉及一种基于Android系统的图像动画引擎,具体的说,是一种适用于Android系统上显示各类动画、图形效果的绘图装置和方法。
背景技术
Android系统是一种基于Linux开放性内核的操作系统,仅上市两年便语句全球最受欢迎的智能设备的操作平台。
目前在Android平台上对图像或者动画的显示都是基于Android平台自带的UI引擎显示,但Android系统自带的UI引擎由于过度封装,其动画和视图是一一对应的,在视图较多的情况下,动画占用的内存开销和引擎驱动计算的开销增大,降低了显示图像或者动画的速度。
并且,系统自带的UI引擎只能够显示简单的、单位时间内同时运行数量少的二维动画,并且其自带的UI引擎的组件比较复杂,加大了开发人员自定义组件的难度。
发明内容
针对现有技术的不足,本发明的目的是要提供一种基于Android系统上工作更有效、使用更流畅的显示图像动画的GO图像动画引擎。
本发明的另外一个目的是要提供一种基于GO图像动画引擎的实现图像动画的方法。
为实现上述目的,本发明的采用的技术方案如下:
一种基于Android系统的GO图像动画引擎,所述GO图像动画引擎包括一组件树和一遍历器,所述组件树包含至少一组件,所述组件包括:
一公共数据区,用于存放该组件的公共数据;和
一数据接口,提供方法供Android系统和/或该组件的父组件修改所述公共数据区中的公共数据;以及
一图形绘制接口,根据遍历器访问,Android系统根据公共数据区的公共数据在一绘图线程中实现组件的绘制。
进一步,所述组件还包括一动画接口,所述动画接口定期在一动画线程中被所述遍历器访问,组件根据遍历器对所述动画接口的访问计算并更新所述公共数据区的公共数据。
进一步,所述组件树的根结点的组件为一继承Android系统视图的UI视图。
进一步,所述GO图像动画引擎还包括一图像工具库,所述图像工具库包括一M图像和图像特效类。
为了实现本发明的另外一个目的,本发明采用的技术方案如下:
一种GO图像动画引擎显示图像动画的实现方法,包括以下步骤:
a、初始化GO图像动画引擎,并启动动画线程;
b、组件根据遍历器在动画线程中定时对动画接口的访问判断是否需要更新公共数据区中的公共数据,如果是,则更新数据并在遍历器上做出数据更新标记;
c、遍历器完成对组件树中所有组件的动画接口的遍历后,检测是否存在所述数据更新标记,如果有,则由组件树的根结点的组件要求Android系统从新绘制图形。
d、Android系统在一绘图线程中通过遍历器依次访问组件树中组件的图形绘制接口重新绘制组件。
进一步,所述初始化GO图像动画引擎包括:
配置GO图像动画引擎的遍历器在动画线程中访问组件树的周期;
加入需要被访问组件树的根结点;
向跟结点中添加需要被显示的UI组件。
进一步,在一个访问周期内,如果遍历器已经完成组件树中所有组件的动画接口的访问,则动画线程会进入休眠状态。
进一步,所述动画线程从休眠状态恢复后,如果检测到停止信号,则进入停止状态,从而使遍历器停滞访问所有组件的动画接口。
相对于现有技术,本发明所述的技术方案能够非常流畅的同时运行大量各类复杂的图像或者动画,并且运行速度快,显示更为流畅;其次基于GO图像动画引擎的组件简单、方便,开发人员可以快速开发定义自己需要的任何组件,减少开发周期;最后,本技术方案还可以使用图像工具包,开发人员不需要掌握及使用Android系统提供的繁琐的画布坐标变换以及画笔设置操作,就能以简单直观的方式就可以达到期望的效果。
为了充分地了解本发明的目的、特征和效果,以下将结合附图对本发明的构思、具体结构及产生的技术效果作进一步说明。
附图说明
图1是本发明所述GO图像动画引擎的结构示意图;
图2是图1中组件的结构示意图;
图3是本发明所述GO图像动画引擎的工作方法流程图;
图4是本发明所述GO图像动画引擎的实现动画的流程图;
图5是图3中初始化的流程图;
图6是图像工具包的工作流程示意图。
图中:
1-组件树;11-组件;111-数据接口;112-图形绘制接口;113-公共数据区;114-动画接口;2-遍历器。
具体实施方式
如图1至图2所示,一种基于Android系统的GO图像动画引擎,包括一组件树1和遍历组件树1的遍历器2。遍历器2遍历组件树1中每一个组件11,来完成组件11的数据更新和绘制图形。
请参阅图1,组件树1由显示在视图上的各种组件11组成,组件11承托着显示到屏幕上的绘图组件,如屏幕上显示的按钮、文本等。这些组件11在组件树1中如树状结构分布,一个组件11也可以包含着其他子组件。本实施例中,该组件树1的根结点为一继承于Android系统视图类的UI视图,并将该UI视图作为组件树的根结点实现与遍历器2的接口。在具体的应用当中,开发者根据不同的需要向根结点如UI视图添加各种需要被显示的UI组件,以满足UI设计要求。
请参阅图2,组件树1中包含至少一个组件11,所述组件11包括数据接口111和图形绘制接口112以及存放该组件11的公共数据的公共数据区113,公共数据区113存放组件11的公共数据,如组件的坐标、组件的长和宽等数据;组件11的数据接口111用于提供方法给外部如Android系统或者该组件的父组件修改组件11的公共数据区113中存放的公共数据,Android系统根据遍历器2对图形绘制接口112的访问,调用公共数据在一图形绘制线程对组件11进行绘制。
组件11中还可包含一动画接口114,动画接口114在一动画线程中被遍历器2访问。组件11根据遍历器2的对动画接口114的访问来计算和更新组件11公共数据区114中存放的公共数据。
GO图像动画引擎还包括一图像工具包,图像工具包包括一M图像和图像特效类,M图像封装了Android系统提供的繁琐的画布坐标变换操作以及画笔设置操作,封装了引擎要显示的图片,并对外提供接口供所述图像特效类调用。M图像可以根据图片的旋转、缩放大小等属性,调用画布的矩阵变换方法及配置,最后调用画布绘制原始位图的方法,从而产生位图的旋转、缩放等效果。开发人员可以通过其简单而直观的调用接口来绘制图片,M图像的接口主要包括:图片锚点位置的X坐标值和Y坐标值;图片水平方向和垂直方向是否镜像翻转的布尔值;图片的缩放宽度和高度;图片旋转的角度;图片最大尺寸的大小,即图片包围盒的大小;图片的透明度;图片的掩码颜色以及图片抗锯齿效果质量。可以通过获取该组件的各个属性来设置标记,通过对标记的操作来设置和/或更改图像实例的属性。
MImage被创建后,可以记录传入参数给各个属性设置默认值。在操作MImage的时候,可以获取以及设置各个属性,如果有属性被更改,则设置对应的标记。对于不同的属性,可以提供不同的设置方法,例如,设置锚点可以用组合枚举值(上、下、垂直居中、左、右)作为传入参数;设置图片的大小,可以用缩放比例作为传入参数进行不等比例的缩放。
以下结合附图6详细描述M图像的工作过程。
请参阅图6,Android系统根据标准格式的位图创建MImage对象(即图片)后,将图片封装在M图像之中,并对外提供接口供外部调用。遍历器2遍历该组件11的数据更新接口,MImage对象更新自身的数据:设置对象的锚点位置(默认是屏幕的左上角)、设置对象在水平方向和/或垂直方向是否需要镜像翻转、设置图片是否需要在水平和/或垂直方向缩放以及缩放的比例、设置图片的旋转角度(默认为0)、设置图片的不透明度(默认为100%)、设置包围盒的大小(默认为无)、完成更新这些数据后,如果这些设置有改变,则给遍历器2发出“重新绘制图形”的信号,遍历器2将组件的“重新绘制图形”的标记标志后,组件就可以实现绘制图形。
M图像组件调用Android系统方法绘制图形,其中锚点在屏幕上的对应位置作为参数传入。根据上述的设置,计算平移、旋转、缩放的组合变换矩阵。如果上述设置中设置了包围盒,则用矩阵对图片中四个顶点进行变换,去变换后的点的包围盒来计算和指定包围盒的大小和比例,对矩阵做一个缩放变换,如果没有指定包围盒,则设置画刷的不透明度、电泳系统绘制位图的方法,将变换后的矩阵和画刷作为参数传入。完成这些操作后,M图像判断是否需要改变绘制,如果不需要,则结束;如果需要,则返回绘制图像后返回上述步骤更新设置。
图像工具包的图像特效类封装了对图像进行特效处理,如模糊、渐变或边缘发光等图像处理算法,在内部实现对图像的每个像素进行计算的功能。对其输入原始的bitmap位图对象,输出就是经过处理的bitmap位图对象。为了提高效率,通过Android的NDK原生开发工具包采用C/C++语言进行编程开发。组件在调用图像工具包对图像进行处理时,组件以组件中的bitmap对象、资源ID、文件路径、输入流等作为参数,并通过M图像的接口调用其方法对图片进行处理;如果需要对图片进行特效处理,则一图片作为参数调用图像工具包中的图像特效类,接收其返回的新的图片就可以得到图片的特效效果。
以下结合附图3至附图5详细描述该基于Android系统的GO图像动画引擎的工作过程。
请参阅图3,图3为本GO图像动画引擎的工作流程图,GO图像动画引擎进入步骤S301开始后,进入步骤S302。
步骤S302:初始化GO图像动画引擎,并启动动画线程。
请参阅图5,创建UI引擎后,准备初始化引擎。初始化在步骤S501开始后,步骤如下:
S502:首先为图像动画引擎配置刷新周期时间的参数,该刷新周期时间即为UI引擎进入一段时间休眠后,重新刷新UI组件的时间间隔。
S503:创建一个继承了Android系统的视图的UI视图,并且将该UI视图作为引擎的根结点和实现引擎的接口,加入引擎遍历的列队中,这样引擎就可以不停的更新UI组件11。
S504:根据不同的设计要求,开发者可以向跟结点中添加各种需要被显示的UI组件11,如按钮、文本框等组件,以此满足UI的设计要求。到此,引擎初始化完成,进入步骤S505结束初始化。
步骤S303:检查需要被刷新的组件11。引擎完成初始化后,遍历器2就会开始查看组件树1中有没有组件11,如果有就会一个一个遍历所有的组件11,如果没有则直接结束。
步骤S304:更新组件数据。由于每一个组件都存在自己特定的属性,如文字的大小、颜色属性等,这些属性就构成了组件内部的数据。遍历器2检查到需要刷新的组件11后,遍历器2遍历组件树1根结点下的每一个组件,调用每一个组件11预先设计好的动画接口114。
步骤S305:组件11根据遍历器2对动画接口114的访问判断是否需要更新数据,如果需要,则进入步骤S306,否则进入步骤S307.
步骤S306:组件11根据自身情况更新数据公共数据区114中存放的公共数据,并在遍历器2上做出相应的数据更新标记。
步骤S307:检测组件11的子组件。由于组件11在组件树1中呈树状结构分布,因此一个组件下面还可以包含若干子组件。遍历器2完成组件11更新后,还需要根据检测该组件11是否存在子组件,如果检测到子组件,则返回步骤S304更新子组件的数据,否则进入步骤S308。
步骤S308:在遍历器2完成对组件树1中所有组件11的动画接口114的遍历后,检测是否存在数据更新标记,如果检测到存在数据更新标记,则进入步骤S309,否则进入步骤S3310。
步骤S309:由组件树1的根结点的组件即UI视图组件要求Android系统重新绘制图形。
步骤S310:在一个访问周期内,如果遍历器2完成遍历组件树1中的所有组件的时间是在一个规定的周期内,则动画线程进入休眠状态直到下一个周期的到来。
步骤S311:动画线程检测在下一个访问周期到来后,检测是否存在停止遍历的信号,如果检测到停止信号则进入步骤S312,停止动画线程,否则重新从步骤S303开始完成下一次遍历。
值得注意的是,遍历器2对动画接口114的访问以及组件11计算和更新数据均在动画线程中完成的。
请参阅图4,Android系统收到根结点绘制图形的要求后,在一图形绘制线程中根据遍历器2对组件树1中组件11的图形绘制接口112的访问,根据公共数据区114中存放的公共数据重新绘制图形,从而完成动画的实现。
以上详细描述的GO图像动画引擎的工作过程,本引擎不需要将动画与视图进行一一对应,在视图较多的时候能有效的降低内存开销和引擎驱动计算。例如本GO图像动画引擎能够在视图容器(XPanel)的animate方法中更新各子控件的属性来减少内存使用和函数调用。
相对于现有技术,本发明所述的技术方案能够单位时间内同时应负大量各类复杂的二维和三维动画运行,由于动画坐标的计算与图形的绘制分别处于不同的线程之中,动画每帧运行速度可以更快、更好地使动画能非常流畅的速度展现UI界面上,带来更好的动画效果。其次,该方法采用的组件简单,开发人员可以快速的开发组件,降低了开发人员组件的开发难度,最后,该GO图像动画引擎还支持图像模糊、渐变等效果,展示图像的效果更丰富。
以上详细描述了本发明的较佳具体实施例,应当理解,本领域的普通技术无需创造性劳动就可以根据本发明的构思作出诸多修改和变化。因此,凡本技术领域中技术人员依本发明构思在现有技术基础上通过逻辑分析、推理或者根据有限的实验可以得到的技术方案,均应该在由本权利要求书所确定的保护范围之中。
Claims (6)
1.一种基于Android系统的GO图像动画引擎,其特征在于,所述GO图像动画引擎包括一组件树和一遍历器,所述组件树包含至少一组件,所述组件包括:
一公共数据区,用于存放该组件的公共数据;和
一数据接口,提供方法供Android系统和/或该组件的父组件修改所述公共数据区中的公共数据;以及
一图形绘制接口,通过遍历器的访问,Android系统根据公共数据区的公共数据在一绘图线程中实现组件的绘制;
所述组件还包括一动画接口,所述动画接口定期在一动画线程中被所述遍历器访问,组件根据遍历器对所述动画接口的访问计算并更新所述公共数据区的公共数据;
所述组件树的根结点的组件为一继承Android系统视图的UI视图。
2.如权利要求1所述的图像动画引擎,其特征在于,所述GO图像动画引擎还包括一图像工具库,所述图像工具库包括一M图像和图像特效类。
3.一种基于权利要求1所述的GO图像动画引擎显示图像动画的实现方法,其特征在于,包括以下步骤:
a、初始化GO图像动画引擎,并启动动画线程;
b、组件根据遍历器在动画线程中定时对动画接口的访问判断是否需要更新公共数据区中的公共数据,如果是,则更新数据并在遍历器上做一数据更新标记;
c、遍历器完成对组件树中所有组件的动画接口的遍历后,如果检测存在所述数据更新标记,则由组件树的根结点的组件要求Android系统重新绘制图形;
d、Android系统在一图形绘制线程中,根据遍历器对组件树中组件的图形绘制接口的访问,重新绘制组件。
4.如权利要求3所述的实现方法,其特征在于,所述初始化GO图像动画引擎包括:
配置GO图像动画引擎的遍历器在动画线程中访问组件树的周期;
加入需要被访问组件树的根结点;
向根结点中添加需要被显示的UI组件。
5.如权利要求4所述的实现方法,其特征在于,在一个访问周期内,如果遍历器已经完成组件树中所有组件的动画接口的访问,则动画线程会进入休眠状态。
6.如权利要求5所述的实现方法,其特征在于,所述动画线程从休眠状态恢复后,如果检测到停止信号,则进入停止状态,从而使遍历器停止访问所有组件的动画接口。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110322303.1A CN102385515B (zh) | 2011-10-21 | 2011-10-21 | 一种基于Android系统的GO图像动画引擎 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110322303.1A CN102385515B (zh) | 2011-10-21 | 2011-10-21 | 一种基于Android系统的GO图像动画引擎 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102385515A CN102385515A (zh) | 2012-03-21 |
CN102385515B true CN102385515B (zh) | 2014-03-26 |
Family
ID=45824956
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110322303.1A Active CN102385515B (zh) | 2011-10-21 | 2011-10-21 | 一种基于Android系统的GO图像动画引擎 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102385515B (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103530898B (zh) * | 2013-01-06 | 2017-04-05 | Tcl集团股份有限公司 | 一种基于3d实时渲染的动画处理方法和系统 |
CN104423930B (zh) * | 2013-08-19 | 2017-12-26 | 联想(北京)有限公司 | 信息处理的方法和装置 |
CN103413343B (zh) * | 2013-08-30 | 2016-03-16 | 广州市久邦数码科技有限公司 | 一种3d图像动画引擎 |
CN103823625B (zh) * | 2014-02-26 | 2017-07-28 | 可牛网络技术(北京)有限公司 | 移动终端中界面图片的控制方法、装置和移动终端 |
CN104268916A (zh) * | 2014-09-10 | 2015-01-07 | 北京金山安全软件有限公司 | 视图的绘制方法、装置和移动终端 |
CN104980665A (zh) * | 2015-06-29 | 2015-10-14 | 北京金山安全软件有限公司 | 一种多视频片段合并方法及多视频片段合并装置 |
CN105183291A (zh) * | 2015-09-02 | 2015-12-23 | 深圳Tcl数字技术有限公司 | 显示界面中的信息提取方法及系统 |
US10430173B2 (en) * | 2015-10-19 | 2019-10-01 | Harman International Industries, Incorporated | Techniques for updating components of a computer device while enabling components for availability |
CN105843603B (zh) * | 2016-03-17 | 2019-08-16 | 广州爱九游信息技术有限公司 | 图形处理的方法及装置 |
CN108010112B (zh) * | 2017-11-28 | 2023-08-22 | 腾讯数码(天津)有限公司 | 动画处理方法、装置及存储介质 |
CN112100539A (zh) * | 2020-08-13 | 2020-12-18 | 福建天泉教育科技有限公司 | 基于canvas的图片平铺方法、存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1731350A (zh) * | 2004-08-06 | 2006-02-08 | 佳能株式会社 | 图像处理装置及其控制方法 |
Family Cites Families (1)
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 |
-
2011
- 2011-10-21 CN CN201110322303.1A patent/CN102385515B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1731350A (zh) * | 2004-08-06 | 2006-02-08 | 佳能株式会社 | 图像处理装置及其控制方法 |
Also Published As
Publication number | Publication date |
---|---|
CN102385515A (zh) | 2012-03-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102385515B (zh) | 一种基于Android系统的GO图像动画引擎 | |
US10706599B2 (en) | Recursive cell-based hierarchy for data visualizations | |
RU2324229C2 (ru) | Визуальный и пространственный графические интерфейсы | |
KR102013404B1 (ko) | 이미지 프로세서용 라인 버퍼 유닛 | |
CN110377285B (zh) | 一种生成页面骨架屏的方法、装置及计算机设备 | |
JP4796499B2 (ja) | 映像およびシーングラフインターフェイス | |
CN103413343B (zh) | 一种3d图像动画引擎 | |
EP1462998A2 (en) | Markup language and object model for vector graphics | |
CN104240148A (zh) | 一种基于插件的电网可视化方法 | |
KR20060006990A (ko) | 애니메이션 오브젝트 인스턴스를 통한 그래픽 표시 요소의애니메이션을 지원하는 시스템 | |
WO2019238145A1 (zh) | 一种基于WebGL的图形绘制方法、装置及系统 | |
CN111459501A (zh) | 基于SVG的Web组态画面存储与展示系统和方法及介质 | |
CN114494024B (zh) | 图像渲染方法、装置、设备及存储介质 | |
US20230290032A1 (en) | Physical special effect rendering method and apparatus, computer device, and storage medium | |
CN103150198A (zh) | 一种组态软件的显示方法 | |
CN110443880B (zh) | 图像渲染方法、装置、存储介质及电子设备 | |
CN106846431B (zh) | 一种支持多表现形式的统一Web图形绘制系统 | |
CN110764757A (zh) | 一种基于html5的交互式图形绘制引擎 | |
TW202112140A (zh) | 用於影像處理器之巨型輸入/輸出單元 | |
CN109614094B (zh) | 基于UML的GPU glCallList视图模型的绘制方法 | |
CN114175088A (zh) | 使用声明式图形服务器渲染图像 | |
CN103092578A (zh) | 嵌入式Linux平台下的显示方法 | |
WO2015196787A1 (zh) | 一种基于界面元视图以构造界面视图的可视界面建模方法 | |
CN104699866A (zh) | 人机界面三维设计系统中的空间表格编辑器的实现方法 | |
WO2022228209A1 (zh) | 可视化视图的构建方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20171115 Address after: 510055, tower 17, A tower, Zhonghua International Center, No. three, 33 Zhongshan Road, Yuexiu District, Guangdong, Guangzhou, China Patentee after: Guangzhou jiubang century science and Technology Co Ltd Address before: 510055 A, block 16-17, China International Center, No. three, Zhongshan Road, Guangzhou, Guangdong, China Patentee before: Guangzhou Jiubang Digital Technology Co., Ltd. |