一种实现浮层动画的方法、存储介质、电子设备和系统与流程

文档序号:14950501发布日期:2018-07-17 22:26阅读:228来源:国知局

本发明涉及动画显示领域,具体涉及一种实现浮层动画的方法、存储介质、电子设备和系统。



背景技术:

在动画投屏功能的开发过程中会使用浮动层的功能,浮动层是一个悬浮于所有界面之上的一个位置,即浮层是在整个手机的最顶层的一个视图。

现有技术中,浮层是通过windowmanager类来进行管理的,android系统给我们提供了唯一的一个浮层动画入口是通过调用windowmanager.layoutparams中的windowanimations方法来为浮层设置一个动画特效。

然而,该动画特效仅仅支持系统动画描述文件anim.xml格式的动画文件,并且打开和关闭动画的操作指令是被系统封装到显示浮层和移除浮层的函数中,此种方法设置的动画效果只能在浮层被创建或浮层被销毁的时候才会自动触发动画的执行,从而导致开始和关闭动画无法主动触发。

可见,系统自带的浮层虽然提供了一个动画设置的api,但是由于限制条件较多,如上述的格式受限以及无法主动触发等,无法灵活使用浮层动画,进而无法满足多变的业务需求。



技术实现要素:

针对现有技术中存在的缺陷,本发明的目的在于提供一种实现浮层动画的方法,极大地扩展了系统浮层的动画功能,提高了浮层的动画交互特性,从而提高了用户的使用体验。

为达到以上目的,本发明采取的技术方案是:

一种实现浮层动画的方法,所述浮层动画由浮层运动形成若干帧浮层而成,包括步骤:

预设浮层运动的起点位置、终点位置、浮层动画的播放总时长以及浮层动画的帧数,根据所述起点位置、终点位置和帧数计算出每帧浮层的实时位置,并根据所述播放总时长和帧数计算出每帧浮层的显示时间;

构建显示函数,并调用所述显示函数依次在每帧浮层对应的显示时间时在对应的实时位置处显示相应帧浮层,直至显示完所有帧浮层,形成浮层动画。

在上述技术方案的基础上,调用显示函数在每帧浮层对应的显示时间时在对应的实时位置处显示相应帧浮层的实现过程为:在windowmanager中的updateview方法中传入每帧浮层的实时位置和显示时间,调用所述updateview方法在相应的显示时间时将该帧浮层移动至相应的实时位置处。

在上述技术方案的基础上,还包括步骤:在显示完一帧浮层后,判断该帧浮层是否为最后一帧浮层,若该帧浮层为最后一帧浮层,则结束调用所述显示函数,否则,继续调用所述显示函数依次显示下一帧浮层。

在上述技术方案的基础上,所述判断该帧浮层是否为最后一帧浮层的方法为:从显示第一帧浮层时开始计时,并在显示完一帧浮层后,得到第一帧浮层到该帧浮层的播放时长,若第一帧浮层到该帧浮层的播放时长等于浮层动画的播放总时长,则该帧浮层为最后一帧浮层。

本发明实施例还提供了一种存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述方法的步骤。

本发明实施例还提供了一种电子设备,包括存储器、处理器及存储在所述存储器上并在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述方法的步骤。

本发明实施例还提供了一种实现浮层动画的系统,所述系统包括设置模块、计算模块、处理模块;

所述设置模块用于预设浮层运动的起点位置、终点位置、浮层动画的播放总时长以及浮层动画的帧数;

所述计算模块用于根据所述起点位置、终点位置和帧数计算出每帧浮层的实时位置,并根据所述播放总时长和帧数计算出每帧浮层的显示时间;

所述处理模块用于构建显示函数,并调用所述显示函数依次在每帧浮层对应的显示时间时在对应的实时位置处显示相应帧浮层,直至显示完所有帧浮层,形成浮层动画。

在上述技术方案的基础上,所述处理模块调用所述显示函数在每帧浮层对应的显示时间时在对应的实时位置处显示相应帧浮层的实现过程为:在windowmanager中的updateview方法中传入每帧浮层的实时位置和显示时间,调用所述updateview方法在相应的显示时间时将该帧浮层移动至相应的实时位置处。

在上述技术方案的基础上,所述系统还包括一判断模块,所述判断模块用于在显示完一帧浮层后,判断该帧浮层是否为最后一帧浮层,当该帧浮层为最后一帧浮层时,所述处理模块结束调用所述显示函数,当该帧浮层不是最后一帧浮层时,所述处理模块继续调用所述显示函数依次显示下一帧浮层。

在上述技术方案的基础上,所述判断模块包括计时单元和比较单元,

所述计时单元用于从显示第一帧浮层时开始计时,并在显示完一帧浮层后,增加相应的时长,得到第一帧浮层到该帧浮层的播放时长;

所述比较单元用于比较第一帧浮层到该帧浮层的播放时长是否等于浮层动画的播放总时长,若第一帧浮层到该帧浮层的播放时长等于浮层动画的播放总时长,则判断该帧浮层为最后一帧浮层。

与现有技术相比,本发明的优点在于:

(1)本发明的实现浮层动画的方法,极大地扩展了系统浮层的动画功能,提高了浮层的动画交互特性,从而提高了用户的使用体验。

(2)本发明的实现浮层动画的方法,从显示第一帧浮层时开始计时,并在显示完一帧浮层后,得到第一帧浮层到该帧浮层的播放时长,通过第一帧浮层到该帧浮层的播放时长是否等于浮层动画的播放总时长来判断该帧浮层是否为最后一帧浮层,并对其进行相应处理,使用起来更加方便。

附图说明

图1为本发明实施例中实现浮层动画的方法的流程图;

图2为本发明实施例中电子设备的连接框图。

具体实施方式

以下结合附图及实施例对本发明作进一步详细说明。

参见图1所示,本发明实施例提供一种实现浮层动画的方法,浮层动画由浮层运动形成若干帧浮层而成,该方法包括步骤:

s1:预设浮层运动的起点位置、终点位置、浮层动画的播放总时长以及浮层动画的帧数。

以android手机实现浮层动画为例,浮层的动画特效是从屏幕的底部向上运动而形成的。为了便于计算每帧浮层的实时位置,建立屏幕坐标系,以屏幕左上角为原点,水平向右表示x轴的正方向,垂直向下表示y轴的正方向。

由于浮层的动画特效是从手机屏幕的底部向上运动而形成的,可以将浮层运动的起点位置设置为屏幕最下方的位置,并将起点位置记为fromheight,此时起点位置的高度y0即为屏幕的高度。为了获取手机屏幕的高度可以通过调用displayutil.getscreenheight(mcontext)方法来进行获取的,该方法会返回整个屏幕尺寸的高度值,并将该高度值赋值给fromheight变量,即

fromheight=displayutil.getscreenheight(mcontext)。

在本发明实施例中,浮层显示的高度记为floatheight,且该浮层显示的高度已知,并终点位置记为toheight,终点位置可以根据浮层运动的起点位置和浮层显示的高度来计算得到,计算公式为:

toheight=fromheight-floatheight。

由此便可得到浮层运动的起点位置和终点位置,并将其位置信息分别保存在fromheight变量和toheight变量中。

s2:根据起点位置、终点位置和帧数计算出每帧浮层的实时位置,并根据播放总时长和帧数计算出每帧浮层的显示时间。

在计算每帧浮层的实时位置时,将每帧浮层的实时位置记为currentheight,帧数用p表示,则第n帧浮层的实时位置为:

currentheight(n)=fromheight-(fromheight-toheight)*n/p

其中,currentheight(n)表示第n帧浮层的实时位置,n=1,2,…,p,p为帧数,fromheight为起点位置,toheight为终点位置。

在形成浮层动画特效的过程中,通常会对浮层动画的播放总时长以及浮层动画的帧数有要求,浮层动画的播放总时长用t0表示,帧数用p表示,可以根据帧数将播放总时长划分为多个时间片,时间片用δt表示,δt=t0/p,此时,该时间片可以理解为相邻两帧浮层显示的时间间隔。用公式表示第n帧浮层的显示时间为:t(n)=n*δt,其中,n=1,2,…,p,t(n)表示第n帧浮层的显示时间,δt为相邻两帧浮层显示的时间间隔。

例如,播放总时长为1000ms,浮层动画的帧数为50,则时间片为1000/50=20ms,即相邻两帧浮层显示的时间间隔为20ms,由此可知依次显示每帧浮层的显示时间为20ms、40ms、60ms……1000ms。

在android的开发过程中有一个handler的类,handler类主要是用于主线程和子线程之间进行通信用的,但是本实施例中,使用handler类,但并没有使用handler的该特性,而是间接的使用了handler类中的一个postdelay函数来实现延迟发送消息,postdelay函数表示向消息队列中发送一条消息,这个消息是延迟一段时间来进行发送的。

在浮层运动开始时,调用postdelay(msg,δt)函数将msg的内容延迟δt时间后发送到消息队列中,此处msg为浮层信息,从而可以实现在延迟δt时间后接收和处理浮层消息,从而控制每帧浮层的显示时间。

s3:构建显示函数,并调用显示函数依次在每帧浮层对应的显示时间时在对应的实时位置处显示相应帧浮层,直至显示完所有帧浮层,形成浮层动画。

在本发明实施例中,调用显示函数在每帧浮层对应的显示时间时在对应的实时位置处显示相应帧浮层的实现过程为:在windowmanager中的updateview方法中传入每帧浮层的实时位置和显示时间,调用updateview方法在相应的显示时间时将该帧浮层移动至相应的实时位置处。通过此种方法便可实现浮层动画的更新,由于相邻两帧浮层的时间间隔通常较短,看起来的动画效果是连续执行的,即完成了整个动画特效的实现。

进一步地,实现浮层动画的方法还包括步骤:在显示完一帧浮层后,判断该帧浮层是否为最后一帧浮层,若该帧浮层为最后一帧浮层,则结束调用显示函数,否则,继续调用显示函数依次显示下一帧浮层。

具体地,判断该帧浮层是否为最后一帧浮层的方法为:从显示第一帧浮层z1时开始计时,并在显示完一帧浮层后,并将此处最新显示完的一帧浮层即为zn,得到第一帧浮层到该帧浮层zn的播放时长,即为到显示完浮层zn时动画已经播放的时长,若第一帧浮层到该帧浮层的播放时长等于浮层动画的播放总时长,则该帧浮层为最后一帧浮层,否则,该帧浮层不是最后一帧浮层。

本发明的实现浮层动画的方法,从显示第一帧浮层时开始计时,并在显示完一帧浮层后,得到第一帧浮层到该帧浮层的播放时长,通过第一帧浮层到该帧浮层的播放时长是否等于浮层动画的播放总时长来判断该帧浮层是否为最后一帧浮层,并对其进行相应处理,使用起来更加方便。

在本发明实施例中,通过定义一个全局的变量count,变量count用于记录浮层动画已经播放的时长,然后在handler的消息接收函数handlemessage中接收变量count发送过来的消息,判断count的值是不是等于浮层动画的播放总时长1000ms,若等于,则表示浮层动画已经完成了,此时不用做其他操作了,若count的值小于浮层动画的播放总时长1000ms,此时需要先将count的值加上时间片20ms,然后在消息接收函数handlemessage中再次调用postdelay(msg,20)方法来发送消息,这样再经过20ms会继续显示下一帧浮层,周而复始,直到count的值大于等于1000的时候表明动画周期已经结束了,此时无需再次调用postdelay函数。

优选地,时间片δt应小于等于16ms,由于人眼的分辨率是16ms,当时间片δt应小于等于16ms时,人眼看到的浮层动画显示就是连续的,不会有任何卡顿的感觉,从而使得浮层动画显示的效果更佳流畅,用户体验更佳。

本发明实施例的实现浮层动画的方法,极大地扩展了系统浮层的动画功能,提高了浮层的动画交互特性,从而提高了用户的使用体验。

本发明实施例还提供了一种存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述方法的步骤。

参见图2所示,本发明实施例还提供了一种电子设备,包括存储器、处理器及存储在存储器上并在处理器上运行的计算机程序,处理器执行计算机程序时实现上述方法的步骤。

本发明实施例还提供了一种实现浮层动画的系统,其特征在于:系统包括设置模块、计算模块、处理模块;

设置模块用于预设浮层运动的起点位置、终点位置、浮层动画的播放总时长以及浮层动画的帧数;

计算模块用于根据起点位置、终点位置和帧数计算出每帧浮层的实时位置,并根据播放总时长和帧数计算出每帧浮层的显示时间;

处理模块用于构建显示函数,并调用显示函数依次在每帧浮层对应的显示时间时在对应的实时位置处显示相应帧浮层,直至显示完所有帧浮层,形成浮层动画。

进一步地,处理模块调用显示函数在每帧浮层对应的显示时间时在对应的实时位置处显示相应帧浮层的实现过程为:在windowmanager中的updateview方法中传入每帧浮层的实时位置和显示时间,调用updateview方法在相应的显示时间时将该帧浮层移动至相应的实时位置处。

进一步地,系统还包括一判断模块,判断模块用于在显示完一帧浮层后,判断该帧浮层是否为最后一帧浮层,当该帧浮层为最后一帧浮层时,处理模块结束调用显示函数,当该帧浮层不是最后一帧浮层时,处理模块继续调用显示函数依次显示下一帧浮层。

具体地,判断模块包括计时单元和比较单元,计时单元用于从显示第一帧浮层时开始计时,并在显示完一帧浮层后,增加相应的时长,得到第一帧浮层到该帧浮层的播放时长;比较单元用于比较第一帧浮层到该帧浮层的播放时长是否等于浮层动画的播放总时长,若第一帧浮层到该帧浮层的播放时长等于浮层动画的播放总时长,则判断该帧浮层为最后一帧浮层,否则,判断该帧浮层不是最后一帧浮层。

本发明的实现浮层动画的系统,从显示第一帧浮层时开始计时,并在显示完一帧浮层后,得到第一帧浮层到该帧浮层的播放时长,通过第一帧浮层到该帧浮层的播放时长是否等于浮层动画的播放总时长来判断该帧浮层是否为最后一帧浮层,并对其进行相应处理,使用起来更加方便。

优选地,相邻帧浮层的显示时间间隔小于16ms。由于人眼的分辨率是16ms,当时间片δt应小于等于16ms时,人眼看到的浮层动画显示就是连续的,不会有任何卡顿的感觉,从而使得浮层动画显示的效果更佳流畅,用户体验更佳。

本发明实施例的实现浮层动画的系统,极大地扩展了系统浮层的动画功能,提高了浮层的动画交互特性,从而提高了用户的使用体验。

本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。

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