一种呼吸灯效果的进度条的层叠显示算法的制作方法

文档序号:12915777阅读:363来源:国知局
本发明涉及进度条计算及呈现
技术领域
:,具体说是一种呼吸灯效果的进度条的层叠显示算法。
背景技术
::android输入控件是一种用于人机交互的元件,androidsdk为此提供了各种各样的输入控件,包括:原生控件,例如:文本域(textview)、按钮(button)、编辑框(edittext)、单选按钮(radiobutton)、列表控件(listview)以及显示图片控件(imageview)等,布局控件,例如:linearlayout、relativelayout、framelayout以及不太常用的tablelayout等等。利用这些基础的输入控件,能实现普通的布局展示,但对于特殊的应用场景,比如复杂的动画展示,或者特别的图形图像要求,利用这些基础的输入控件无法实现,因此就需要自定义控件来满足特别的需求。在android系统中,自定义控件,主要包括两类:第一类,组合自定义控件,是指使用系统提供的各种界面控件,通过自定义封装成包括多个系统控件的自定义控件,代码在内部处理各子控件的交互,简化使用。第二类,自绘制控件,是指通过继承系统提供的各种界面控件,在控件的测量、布局、绘制三个方法中,使用代码进行测量、绘制、处理交互事件的自定义控件。自绘制控件能提供比系统控件更新颖的界面、更丰富的交互方式。新买的耳机,为了获得良好的听感,大多需要通过专业软件进行煲机,增加耳机寿命。煲机是指:通过播放一段时间特殊音频,让耳机达到最佳效果。而通常煲机过程持续时间很长,10~100小时不等,因此在堡机过程中,需要一个智能的体验好的煲机进度的展示,如果动画处理的不当,会导致内存持续增加,cpu和gpu负担过重,进而导致手机发热,耗电严重,甚至应用崩溃。技术实现要素:针对现有技术中存在的缺陷,本发明的目的在于提供一种呼吸灯效果的进度条的层叠显示算法,通过圆环形进度条及呼吸灯效果的环绕,实现了具美感、个性化、直观易懂的进度条展现,算法效率高,占用资源少,通用性好,适合于android系统中使用。为达到以上目的,本发明采取的技术方案是:一种呼吸灯效果的进度条的层叠显示算法,其特征在于,包括如下步骤:步骤1,进度条背景适配处理,所述进度条为圆环形进度条,所述进度条背景为一圆形;圆环形进度条的直径小于进度条背景的直径;步骤2,设定控件及绘制相关参数;步骤3,在进度条背景区域,以层叠的方式绘制圆环形进度条;步骤4,显示呼吸灯效果;步骤5,开启呼吸灯变化的线程,根据设定好的刷新频率,按以下方式循环切换画笔模糊过滤器半径的值:当达到最大值时,需要从最大值基础上递减,当达到最小值时,需要从最小值基础上递增;同时,改变构成波纹线的竖线的高度标记,使其与呼吸灯节奏统一;步骤6,绘制跟随进度显示的进度文字;步骤7,绘制位于圆环形进度条中心的描述文字。在上述技术方案的基础上,步骤2中,基于布局控件linearlayout,自定义新的控件类burnprogressview,在构造函数处增加初始化方法,包括:构造200个画笔模糊过滤器,设置好圆环形进度条的半径,初始化绘制进度以及用于绘制背景的画笔;在onsizechanged回调中,根据控件尺寸,初始化圆环形进度条的尺寸,根据画笔的宽度,确定内圈和外圈的区域,以便在进度条两边绘制渐变线,达到凹凸立体效果;设定若干竖线从左到右依次排列,并采用中间高两边低的形式,以形成波纹线,其中:屏幕宽度减去步骤1中所述的进度条背景的直径,即得到进度条背景左右两边波纹线的显示宽度,根据设定的竖线间距和显示宽度,计算得到竖线的显示个数,设定一竖线高度最低值,设定中间的竖线最高,中间的竖线左右两侧的竖线稍低,再外侧的竖线逐步递减至竖线高度最低值;优化中间的竖线高度使其比计算出的正常值高10个像素,优化中间的竖线左右两侧的竖线比计算出的正常值高5个像素。在上述技术方案的基础上,步骤3中,首先,将进度按照100%分为四个阶段,其中:进度值在0-25%、26%-50%、51%-75%和76%-100%区间时,用粗线绘制,否则用细线绘制,形成深色背景;然后,当前进度值使用亮色粗线画笔覆盖在深色背景上;再后,使用弧度渐变的画笔,在深色背景两边沿轮廓绘制渐变的线条。在上述技术方案的基础上,步骤4中,给画笔设置模糊过滤器,设置blurmaskfilter.blur为外部显示outer样式,设置模糊半径为1-200,在呼吸灯线程中,不断循环计算模糊半径的数值,到达最大值时从最大值递减到最小值,再从最小值递增到最大值,同时调用postinvalidate绘制屏幕。在上述技术方案的基础上,为了达到像人真实呼吸的节奏,在模糊半径变小的时候,增加一个幅度值3,在模糊半径变大的时候,增加一个幅度值6,这样在变化的时候速度不一样,就达到了真实呼吸的效果。在上述技术方案的基础上,步骤5中,所述刷新频率为:四个阶段界面绘制的界面刷新频率为160、90、40和20,单位是毫秒。在上述技术方案的基础上,步骤6中,进度文字首先绘制在正上方,首先将进度文字设置为100%,因为这个是最大的进度值,为了更好的适配,需要记录最长进度值文字的宽度和高度,在之后的绘制中就可以确定绘制的进度文字的区域;整个圆环是360°,对应进度100%,可以计算出进度值对应的角度,这样就可以精确计算针对当前进度值的旋转角度,根据半径和弧度的换算,计算出绘制文字的区域,就达到了跟随进度条动态展示的效果。在上述技术方案的基础上,步骤7中,先确定文字显示区域和圆环形进度条的左右距离,再确定文字宽度,当文字宽度超过文字显示区域的宽度后,执行滚动逻辑进行跑马灯文字显示,没有超过就正常显示。在上述技术方案的基础上,在实现呼吸灯效果时,在控件的构造函数中实例化200个模糊过滤器,在绘制线程中使用预先设置的模糊过滤器。在上述技术方案的基础上,在计算构成波纹线的竖线的时候,竖线的高度以及间距也是在每个阶段保持不变,所以只是需要在阶段变化的时候动态计算竖线高度即可,不必每次刷新都要计算高度。本发明所述的呼吸灯效果的进度条的层叠显示算法,通过圆环形进度条及呼吸灯效果的环绕,实现了具美感、个性化、直观易懂的进度条展现,算法效率高,占用资源少,通用性好,适合于android系统中使用。本发明所述的呼吸灯效果的进度条的层叠显示算法,在煲机(例如耳机的煲机)过程中,圆环形进度条和呼吸灯效果协调展现,尤为适用。针对煲机时间久的特殊场景,根据不同阶段,展示不同的呼吸节奏,优化内存使用,效率更高,体验更佳。附图说明本发明有如下附图:图1本发明的流程图。图2呼吸灯效果的进度条示例。具体实施方式以下结合附图对本发明作进一步详细说明。如图1、2所示,本发明所述的呼吸灯效果的进度条的层叠显示算法,包括如下步骤:步骤1,进度条背景适配处理,所述进度条为圆环形进度条,所述进度条背景为一圆形;圆环形进度条的直径小于进度条背景的直径;首先根据圆环形进度条的设计图的分辨率,测量进度条背景的尺寸,然后在不同设备上获取当前分辨率,根据设计图的比例计算出不同设备中进度条背景的尺寸,以便准确确定不同设备中呼吸灯效果显示的区域,然后从本地图片中加载背景图片,再将背景图片根据不同设备的屏幕宽高进行缩放,mbitmap=burnutils.getbitmap(b,(ourter_radius)*2,(ourter_radius)*2);缩放的方法为:利用缩放矩阵和缩放比例,将背景图片变成计算出的进度条背景的尺寸;例如,可采用以下算法:matrixmatrix=newmatrix();floatscale=(deswidth)/w;floatscale2=(desheight)/h;matrix.postscale(scale,scale2);deswidth、desheight为想要缩放成的宽和高,w和h是屏幕宽高;步骤2,设定控件及绘制相关参数;基于布局控件linearlayout,自定义新的控件类burnprogressview,在构造函数处增加初始化方法,包括:构造200个画笔模糊过滤器,设置好圆环形进度条的半径,初始化绘制进度以及用于绘制背景的画笔;在onsizechanged回调中,根据控件尺寸,初始化圆环形进度条的尺寸,根据画笔的宽度,确定内圈和外圈的区域,以便在进度条两边绘制渐变线,达到凹凸立体效果;设定若干竖线从左到右依次排列,并采用中间高两边低的形式,以形成波纹线,其中:屏幕宽度减去步骤1中所述的进度条背景的直径,即得到进度条背景左右两边波纹线的显示宽度,根据设定的竖线间距和显示宽度,计算得到竖线的显示个数,设定一竖线高度最低值,设定中间的竖线最高,中间的竖线左右两侧的竖线稍低,再外侧的竖线逐步递减至竖线高度最低值;优化中间的竖线高度使其比计算出的正常值高10个像素,优化中间的竖线左右两侧的竖线比计算出的正常值高5个像素;步骤3,在进度条背景区域,以层叠的方式绘制圆环形进度条;首先,将进度按照100%分为四个阶段,其中:进度值在0-25%、26%-50%、51%-75%和76%-100%区间时,用粗线绘制,否则用细线绘制,形成深色背景;然后,当前进度值使用亮色(例如黄色)粗线画笔覆盖在深色背景上;再后,使用弧度渐变的画笔,在深色背景两边沿轮廓绘制渐变的线条,例如,可按以下示例设定渐变:mgradient30_100=newsweepgradient(mcenterx,mcentery,newint[]{color_alpha_30,color_alpha_100,color_alpha_30,color_alpha_00,color_alpha_30},newfloat[]{0f,0.25f,0.5f,0.75f,1f});上述代码所述渐变表示:圆环形的0弧度对应点的透明度是30,圆环形的90弧度对应点的透明度是100,圆环形的180弧度对应点的透明度是30,圆环形的270弧度对应点的透明度是0,圆环形的360弧度对应点的透明度是30;设置透明度对应圆环的位置0°、25°、50°、75°和360°的位置,定义角度渐变对象sweepgradient设置给画笔,就达到在圆环形进度两边绘制渐变线条实现凹凸显示的效果了;步骤4,显示呼吸灯效果;给画笔设置模糊过滤器,设置blurmaskfilter.blur为外部显示outer样式,设置模糊半径为1-200,需要说明的是:使用的时候不能设置模糊半径为0,否则应用会崩溃;mpaintfilter.setmaskfilter(marrayfilterblur[filterradius]);在呼吸灯线程中,不断循环计算模糊半径的数值,到达最大值时从最大值递减到最小值,再从最小值递增到最大值,同时调用postinvalidate绘制屏幕;更进一步,为了达到像人真实呼吸的节奏,在模糊半径变小的时候,增加一个幅度值3,在模糊半径变大的时候,增加一个幅度值6,这样在变化的时候速度不一样,就达到了真实呼吸的效果了;步骤5,开启呼吸灯变化的线程,根据设定好的刷新频率,按以下方式循环切换画笔模糊过滤器半径的值:当达到最大值时,需要从最大值基础上递减,当达到最小值时,需要从最小值基础上递增;同时,改变构成波纹线的竖线的高度标记,使其与呼吸灯节奏统一;所述刷新频率为:四个阶段界面绘制的界面刷新频率为160、90、40和20,单位是毫秒;步骤6,绘制跟随进度显示的进度文字;进度文字首先绘制在正上方,首先将进度文字设置为100%,因为这个是最大的进度值,为了更好的适配,需要记录最长进度值文字的宽度和高度,在之后的绘制中就可以确定绘制的进度文字的区域;整个圆环是360°,对应进度100%,可以计算出进度值对应的角度,这样就可以精确计算针对当前进度值的旋转角度,根据半径和弧度的换算,计算出绘制文字的区域,就达到了跟随进度条动态展示的效果;步骤7,绘制位于圆环形进度条中心的描述文字;先确定文字显示区域和圆环形进度条的左右距离,再确定文字宽度,当文字宽度超过文字显示区域的宽度后,执行滚动逻辑进行跑马灯文字显示,没有超过就正常显示;所述执行滚动逻辑进行跑马灯文字显示,是指:超出宽度以后,只需要让绘制文字的横坐标逐渐减小即可,当移动到文字的宽度之后,从右边开始继续往左移动,期间要控制好横坐标,以及第一次展示的时候,是显示在左边。本发明,针对手机内存小、计算能力有限的情况,为节省更多cpu资源,采用了以下优化算法:需要优化的原因是:因为刷新界面是毫秒级别,有些变量的计算以及内存分配需要优化,否则手机会因为内存小计算能力差而产生异常现象,如卡顿或者应用崩溃等;优化1、在实现呼吸灯效果时,在控件的构造函数中实例化200个模糊过滤器,这样在绘制线程中使用预先设置的模糊过滤器就可以了,否则在极短的时间内生成大量的内存对象,会导致内存抖动,而出现卡顿甚至崩溃;优化2、在计算构成波纹线的竖线的时候,竖线的高度以及间距也是在每个阶段保持不变,所以只是需要在阶段变化的时候动态计算竖线高度即可,不必每次刷新都要计算高度;优化3、在绘制当前进度文字的时候,如果进度没有变化,就不需要重新计算进度文字的显示区域,也不需要计算旋转的角度,这样会省去很多不必要的计算量,达到优化的目的。经过实践,本方案在持续运行数小时,手机也没有过热和卡顿的现象。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1