一种弧线变速运动的变速值的生成算法制造技术

技术编号:19511070 阅读:48 留言:0更新日期:2018-11-21 07:39
本发明专利技术涉及一种弧线变速运动的变速值的生成算法,包括如下步骤:通过FastOutSlowInInterpolator产生变速值,将变速值赋值给MATERIAL_INTERPOLATOR,作为interpolator插补器的属性,来修饰动画运动的速率,实现了弧线变速运动的变速值的生成及控制,具体说是调用computeRender方法,通过计算终点角度和起点角度的差值,来得出旋转的角度,计算画布旋转角度。本发明专利技术,通过FastOutSlowInInterpolator产生变速值,作为interpolator插补器的属性,在使用动画Animation或者AnimationSet的时候,使用这个属性来修饰动画运动的速率,实现了弧线变速运动的变速值的生成及控制,算法简洁,易于使用,提高开发效率。

【技术实现步骤摘要】
一种弧线变速运动的变速值的生成算法
本专利技术涉及应用的加载动画
,具体说是一种弧线变速运动的变速值的生成算法。
技术介绍
现有的应用程序(例如App),在打开运行时,总会看到一个加载动画页面,以便在等待加载的过程中,用户可以知晓应用程序正在工作、加载的进度等信息。常见的加载动画页面,有的是呈现一张静态图片,有的是呈现一组图片实现动画效果,有的是呈现一段短视频实现动画效果,为了凸显个性化,丰富加载动画页面的功能及动画效果,有必要对加载动画页面进行优化、再设计。根据公司目前的开发计划,拟实现一种模拟能量守恒双摆球的动画效果,该动画效果作为新版App的加载动画页面。所述模拟能量守恒双摆球动画效果中,包括沿水平方向依次排列的多颗小球(通常是奇数个),这些小球中,最左侧和最右侧的小球交替的被弹出并回落,小球的移动轨迹为弧线,且移动速度不恒定,故需要专门设计相应的轨迹移动算法。在算法设计中,由于小球的移动轨迹为弧线,且移动速度不恒定,因此,如何提供相应的控制值(变速值)实现对小球轨迹的移动速度控制,是关键算法之一。
技术实现思路
针对现有技术中存在的缺陷,本专利技术的目的在于提供一种弧线变速运动的变速值的生成算法,通过FastOutSlowInInterpolator产生变速值,作为interpolator插补器的属性,在使用动画Animation或者AnimationSet的时候,使用这个属性来修饰动画运动的速率,实现了弧线变速运动的变速值的生成及控制,算法简洁,易于使用,提高开发效率。为达到以上目的,本专利技术采取的技术方案是:一种弧线变速运动的变速值的生成算法,其特征在于,包括如下步骤:通过FastOutSlowInInterpolator产生变速值,所述FastOutSlowInInterpolator指贝塞尔曲线的插补器FastOutSlowInInterpolator(),运动规律是由慢到快再到慢,将变速值赋值给MATERIAL_INTERPOLATOR,作为interpolator插补器的属性,限定MATERIAL_INTERPOLATOR为privatestaticfinalInterpolator,在使用动画Animation或者AnimationSet的时候,使用这个属性来修饰动画运动的速率,实现了弧线变速运动的变速值的生成及控制,在FastOutSlowInInterpolator产生中调用computeRender方法,通过计算终点角度mEndDegrees和起点角度mStartDegrees的差值,来得出旋转的角度mSwipeDegrees,也就是变化的角度,计算时,判断Math.abs(mEndDegrees-mStartDegrees)>0是否成立,成立则mSwipeDegrees=mEndDegrees–mStartDegrees,设mRotationIncrement是新的旋转角度增量,mOriginRotationIncrement是上一次循环角度增量,MAX_ROTATION_INCREMENT是每次旋转最大增加角度值,则:mRotationIncrement=mOriginRotationIncrement+(MAX_ROTATION_INCREMENT*renderProgress),即:新的旋转角度增量=上一次循环角度增量+(每次旋转最大增加角度值*当前变化的进度),计算画布旋转角度:((一次循环的角度/循环总次数)*当前变化的进度)+(一次循环的角度*(当前循环位置/循环总次数))。在上述技术方案的基础上,终点角度mEndDegrees和起点角度mStartDegrees通过以下步骤计算:判断当前变化的进度renderProgress小于等于起点绘制结束时进度START_TRIM_DURATION_OFFSET,则:起点移动进度startTrimProgress赋值为(renderProgress)/(1.0f-START_TRIM_DURATION_OFFSET),即:判断当目前变化进度小于起点结束进度时,起点移动进度=当前变化进度/起点变化进度,起点应该移动后的新角度mStartDegrees赋值为mOriginStartDegrees+MAX_SWIPE_DEGREES*MATERIAL_INTERPOLATOR.getInterpolation(startTrimProgress),即:起点应该移动后的新角度=原角度+一次绘制角度*转换后起点应该移动的进度,原角度mOriginStartDegrees即指初始角度,一次绘制角度MAX_SWIPE_DEGREES即指单次绘制画弧所占最大角度,判断当前变化的进度renderProgress大于起点绘制结束时进度START_TRIM_DURATION_OFFSET,则:终点移动进度endTrimProgress赋值为(renderProgress-START_TRIM_DURATION_OFFSET)/(END_TRIM_DURATION_OFFSET-START_TRIM_DURATION_OFFSET),即:判断当目前变化进度大于起点结束进度时,终点移动进度=(当前变化进度-起点绘制结束时进度)/(终点绘制结束时进度-起点绘制结束时进度),终点应该移动后的新角度mEndDegrees赋值为mOriginEndDegrees+MAX_SWIPE_DEGREES*MATERIAL_INTERPOLATOR.getInterpolation(endTrimProgress),即:终点应该移动后的新角度=原角度+一次绘制角度*转换后终点应该移动的进度。在上述技术方案的基础上,调用插补器通过如下方式:创建动画监听器mAnimatorListener,设置动画开始时的操作和动画过程中的操作,动画过程中的的时候,onAnimationRepeat方法会在动画在重复播放的时候被回调,storeOriginals()保存上一次绘制位置,mStartDegrees=mEndDegrees,设置下一次起点为上一次的终点;mRotationCount=(mRotationCount+1)%(NUM_POINTS)重新设置当前循环位置,NUM_POINTS是循环总次数,动画开始的时候,mRotationCount=0,把当前循环位置置为0。在上述技术方案的基础上,使用时,把创建的监听器mAnimatorListener设置给mRenderAnimator,这是android系统提供的一种属性动画,用来控制控件的动画。在上述技术方案的基础上,默认MAX_SWIPE_DEGREES取值为0.6f*DEGREE_360,DEGREE_360=360作为初始旋转角度,表示向右上方绘制。在上述技术方案的基础上,默认起点绘制结束时进度START_TRIM_DURATION_OFFSET=0.5f,默认终点绘制结束时进度END_TRIM_DURATION_OFFSET=1.0f。在上述技术方案的基础上,重新进入该页面的时候再恢复到初始位置,把上一次终点角度mOriginEndDegrees置为0,上一次起点角度mOriginStar本文档来自技高网...

【技术保护点】
1.一种弧线变速运动的变速值的生成算法,其特征在于,包括如下步骤:通过FastOutSlowInInterpolator产生变速值,所述FastOutSlowInInterpolator指贝塞尔曲线的插补器FastOutSlowInInterpolator(),运动规律是由慢到快再到慢,将变速值赋值给MATERIAL_INTERPOLATOR,作为interpolator插补器的属性,限定MATERIAL_INTERPOLATOR为private static final Interpolator,在使用动画Animation或者AnimationSet的时候,使用这个属性来修饰动画运动的速率,实现了弧线变速运动的变速值的生成及控制,在FastOutSlowInInterpolator产生中调用computeRender方法,通过计算终点角度mEndDegrees 和起点角度mStartDegrees的差值,来得出旋转的角度mSwipeDegrees,也就是变化的角度,计算时,判断Math.abs(mEndDegrees ‑ mStartDegrees) > 0是否成立,成立则mSwipeDegrees = mEndDegrees – mStartDegrees,设mRotationIncrement是新的旋转角度增量,mOriginRotationIncrement是上一次循环角度增量,MAX_ROTATION_INCREMENT是每次旋转最大增加角度值,则:mRotationIncrement = mOriginRotationIncrement + (MAX_ROTATION_INCREMENT * renderProgress),即:新的旋转角度增量=上一次循环角度增量+(每次旋转最大增加角度值*当前变化的进度),计算画布旋转角度:((一次循环的角度/循环总次数)*当前变化的进度)+(一次循环的角度*(当前循环位置/循环总次数))。...

【技术特征摘要】
1.一种弧线变速运动的变速值的生成算法,其特征在于,包括如下步骤:通过FastOutSlowInInterpolator产生变速值,所述FastOutSlowInInterpolator指贝塞尔曲线的插补器FastOutSlowInInterpolator(),运动规律是由慢到快再到慢,将变速值赋值给MATERIAL_INTERPOLATOR,作为interpolator插补器的属性,限定MATERIAL_INTERPOLATOR为privatestaticfinalInterpolator,在使用动画Animation或者AnimationSet的时候,使用这个属性来修饰动画运动的速率,实现了弧线变速运动的变速值的生成及控制,在FastOutSlowInInterpolator产生中调用computeRender方法,通过计算终点角度mEndDegrees和起点角度mStartDegrees的差值,来得出旋转的角度mSwipeDegrees,也就是变化的角度,计算时,判断Math.abs(mEndDegrees-mStartDegrees)>0是否成立,成立则mSwipeDegrees=mEndDegrees–mStartDegrees,设mRotationIncrement是新的旋转角度增量,mOriginRotationIncrement是上一次循环角度增量,MAX_ROTATION_INCREMENT是每次旋转最大增加角度值,则:mRotationIncrement=mOriginRotationIncrement+(MAX_ROTATION_INCREMENT*renderProgress),即:新的旋转角度增量=上一次循环角度增量+(每次旋转最大增加角度值*当前变化的进度),计算画布旋转角度:((一次循环的角度/循环总次数)*当前变化的进度)+(一次循环的角度*(当前循环位置/循环总次数))。2.如权利要求1所述的弧线变速运动的变速值的生成算法,其特征在于:终点角度mEndDegrees和起点角度mStartDegrees通过以下步骤计算:判断当前变化的进度renderProgress小于等于起点绘制结束时进度START_TRIM_DURATION_OFFSET,则:起点移动进度startTrimProgress赋值为(renderProgress)/(1.0f-START_TRIM_DURATION_OFFSET),即:判断当目前变化进度小于起点结束进度时,起点移动进度=当前变化进度/起点变化进度,起点应该移动后的新角度mStartDegrees赋值为mOriginStartDegrees+MAX_SWIPE_DEGREES*MATERIAL_INTERPOLATOR.getInterpolation(startTrimProgress),即:起点应该移动后的新角度=原角度+一次绘制角度*转换后起点应该移动的进度,原角度mOriginStartDegrees即指初始角度,一次绘制角度MAX_SWIPE_DEGREES即...

【专利技术属性】
技术研发人员:孙征
申请(专利权)人:北京酷我科技有限公司
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1