一种弧线变速运动的动画算法制造技术

技术编号:19489091 阅读:116 留言:0更新日期:2018-11-17 12:02
本发明专利技术涉及一种弧线变速运动的动画算法,包括如下步骤:创建画布Canvas,供用户在上面进行绘制,在onDraw回调中,canvas.save()获取canvas保存的状态,以画布中心为中心进行画布旋转,创建一个新的绘制区域arcBounds做为缓存,并设置内边距mStrokeInset,设置每次绘制时画笔mPaint的宽度和颜色,创建画笔时刻一并创建绘制区域,用于布局界面CircleRotateActivity,开始画圆弧canvas.drawArc,最后再恢复到canvas最初的状态。本发明专利技术,自定义控件,实现圆弧摆动的效果,模拟能量守恒球不断碰撞的动画效果,呈现全新的加载动画页面,凸显个性化及App,具一定扩展性,可修改制作其他样式的加载动画效果,提高开发效率。

【技术实现步骤摘要】
一种弧线变速运动的动画算法
本专利技术涉及应用的加载动画
,具体说是一种弧线变速运动的动画算法。
技术介绍
现有的应用程序(例如App),在打开运行时,总会看到一个加载动画页面,以便在等待加载的过程中,用户可以知晓应用程序正在工作、加载的进度等信息。常见的加载动画页面,有的是呈现一张静态图片,有的是呈现一组图片实现动画效果,有的是呈现一段短视频实现动画效果,为了凸显个性化,丰富加载动画页面的功能及动画效果,有必要对加载动画页面进行优化、再设计。根据公司目前的开发计划,拟实现一种模拟能量守恒双摆球的动画效果,该动画效果作为新版App的加载动画页面。所述模拟能量守恒双摆球动画效果中,包括沿水平方向依次排列的多颗小球(通常是奇数个),这些小球中,最左侧和最右侧的小球交替的被弹出并回落,小球的移动轨迹为弧线,且移动速度不恒定,故需要专门设计相应的轨迹移动算法。
技术实现思路
针对现有技术中存在的缺陷,本专利技术的目的在于提供一种弧线变速运动的动画算法,自定义控件,实现圆弧摆动的效果,模拟能量守恒球不断碰撞的动画效果,呈现全新的加载动画页面,凸显个性化及App,具一定扩展性,可修改制作其他样式的加载动画效果,提高开发效率。为达到以上目的,本专利技术采取的技术方案是:一种弧线变速运动的动画算法,其特征在于,包括如下步骤:创建画布Canvas,Canvas由android系统提供,供用户在上面进行绘制,在onDraw回调中,canvas.save()获取canvas保存的状态,以画布中心为中心进行画布旋转,创建一个新的绘制区域arcBounds做为缓存,并设置内边距mStrokeInset,设置每次绘制时画笔mPaint的宽度mPaint.setStrokeWidth和颜色mPaint.setColor,创建画笔mPaint时刻一并创建绘制区域mTempBounds,绘制区域mTempBounds用于布局界面CircleRotateActivity,开始画圆弧canvas.drawArc,drawArc获取以下参数信息:第一个参数为圆弧的形状和大小的范围,第二个参数是设置圆弧是从哪个角度来绘画的,第三个参数是设置圆弧扫过的角度,第四个参数是设置圆弧在绘画的时候是否经过圆形,第五个参数是定义的画笔mPaint,最后再恢复到canvas最初的状态canvas.restoreToCount(saveCount)。在上述技术方案的基础上,画布旋转角度mGroupRotation的计算方法如下:mGroupRotation=((FULL_GROUP_ROTATION/NUM_POINTS)*renderProgress)+(FULL_GROUP_ROTATION*(mRotationCount/NUM_POINTS));其中:FULL_GROUP_ROTATION是一次循环的角度,NUM_POINTS是循环总次数,renderProgress是当前变化的进度,mRotationCount是当前循环位置。在上述技术方案的基础上,设置每次绘制时画笔mPaint的宽度mPaint.setStrokeWidth时,调用getStrokeWidth()计算特定屏幕下画线的宽度,具体计算方式为:特定屏幕下画线的宽度等于设置的默认画线宽度*屏幕分辨率screenDensity。在上述技术方案的基础上,所述第一个参数,由createArcBounds(arcBounds,i)计算得出,确定圆弧的形状和大小范围,需要针对每个线确定下一个画布区域,创建临时的绘制区域arcBounds,其中intervalWidth+=getStrokeWidth()/(i+1.0f)*1.5f两条线间区域差为上一个线宽度的1.5倍,再根据上一个绘制区域的位置和两条线间的区域就确定了新区域arcBounds的范围。在上述技术方案的基础上,所述第二个参数,起点角度是mStartDegrees,分别加上180和360表示向左上方和右上方绘制。在上述技术方案的基础上,所述第三个参数,代表扫过的角度,等于终点角度减去起点角度,即:mSwipeDegrees=mEndDegrees–mStartDegrees。在上述技术方案的基础上,在CircleRotateActivity界面中用LoadingDrawable创建出一个背景mWhorlDrawable并设置为mIvWhorl控件的背景,在该界面onStart()时调用mWhorlDrawable.start(),在该界面onStop()时调用mWhorlDrawable.stop();创建mWhorlDrawable时传入了一个加载渲染器LoadingRenderer,newWhorlLoadingRenderer(this)对象。在上述技术方案的基础上,WhorlLoadingRenderer继承LoadingRenderer,创建一个贝塞尔曲线的插补器FastOutSlowInInterpolator(),运动规律是由慢到快再到慢,FastOutSlowInInterpolator产生速度先慢再快最后再慢的变速值。在上述技术方案的基础上,创建一个贝塞尔曲线的插补器FastOutSlowInInterpolator的具体包括:执行newFastOutSlowInInterpolator(),赋值给MATERIAL_INTERPOLATOR,限定MATERIAL_INTERPOLATOR为privatestaticfinalInterpolator。在上述技术方案的基础上,调用插补器通过如下方式:创建动画监听器mAnimatorListener,设置动画开始时的操作和动画过程中的操作,动画过程中的的时候,onAnimationRepeat方法会在动画在重复播放的时候被回调,storeOriginals()保存上一次绘制位置,mStartDegrees=mEndDegrees,设置下一次起点为上一次的终点;mRotationCount=(mRotationCount+1)%(NUM_POINTS)重新设置当前循环位置,动画开始的时候,mRotationCount=0,把当前循环位置置为0。本专利技术所述的弧线变速运动的动画算法,自定义控件,实现圆弧摆动的效果,模拟能量守恒球不断碰撞的动画效果,呈现全新的加载动画页面,凸显个性化及App,具一定扩展性,可修改制作其他样式的加载动画效果,提高开发效率。附图说明本专利技术有如下附图:图1本专利技术的流程图。具体实施方式以下结合附图对本专利技术作进一步详细说明。如图1所示,本专利技术所述的弧线变速运动的动画算法,包括如下步骤:创建画布Canvas,Canvas由android系统提供,供用户在上面进行绘制,在onDraw回调中,canvas.save()获取canvas保存的状态,以画布中心为中心进行画布旋转,canvas.rotate(mGroupRotation,bounds.exactCenterX(),bounds.exactCenterY()),其中:mGroupRotation为画布旋转角度,bounds.exactCenterX(),bounds.exactCenterY()为画布本文档来自技高网...

【技术保护点】
1.一种弧线变速运动的动画算法,其特征在于,包括如下步骤:创建画布Canvas,Canvas由android系统提供,供用户在上面进行绘制,在onDraw回调中,canvas.save()获取canvas保存的状态,以画布中心为中心进行画布旋转,创建一个新的绘制区域arcBounds做为缓存,并设置内边距mStrokeInset,设置每次绘制时画笔mPaint的宽度mPaint.setStrokeWidth和颜色mPaint.setColor,创建画笔mPaint时刻一并创建绘制区域mTempBounds,绘制区域mTempBounds用于布局界面CircleRotateActivity,开始画圆弧canvas.drawArc,drawArc获取以下参数信息:第一个参数为圆弧的形状和大小的范围,第二个参数是设置圆弧是从哪个角度来绘画的,第三个参数是设置圆弧扫过的角度,第四个参数是设置圆弧在绘画的时候是否经过圆形,第五个参数是定义的画笔mPaint,最后再恢复到canvas最初的状态canvas.restoreToCount(saveCount)。

【技术特征摘要】
1.一种弧线变速运动的动画算法,其特征在于,包括如下步骤:创建画布Canvas,Canvas由android系统提供,供用户在上面进行绘制,在onDraw回调中,canvas.save()获取canvas保存的状态,以画布中心为中心进行画布旋转,创建一个新的绘制区域arcBounds做为缓存,并设置内边距mStrokeInset,设置每次绘制时画笔mPaint的宽度mPaint.setStrokeWidth和颜色mPaint.setColor,创建画笔mPaint时刻一并创建绘制区域mTempBounds,绘制区域mTempBounds用于布局界面CircleRotateActivity,开始画圆弧canvas.drawArc,drawArc获取以下参数信息:第一个参数为圆弧的形状和大小的范围,第二个参数是设置圆弧是从哪个角度来绘画的,第三个参数是设置圆弧扫过的角度,第四个参数是设置圆弧在绘画的时候是否经过圆形,第五个参数是定义的画笔mPaint,最后再恢复到canvas最初的状态canvas.restoreToCount(saveCount)。2.如权利要求1所述的弧线变速运动的动画算法,其特征在于:画布旋转角度mGroupRotation的计算方法如下:mGroupRotation=((FULL_GROUP_ROTATION/NUM_POINTS)*renderProgress)+(FULL_GROUP_ROTATION*(mRotationCount/NUM_POINTS));其中:FULL_GROUP_ROTATION是一次循环的角度,NUM_POINTS是循环总次数,renderProgress是当前变化的进度,mRotationCount是当前循环位置。3.如权利要求1所述的弧线变速运动的动画算法,其特征在于:设置每次绘制时画笔mPaint的宽度mPaint.setStrokeWidth时,调用getStrokeWidth()计算特定屏幕下画线的宽度,具体计算方式为:特定屏幕下画线的宽度等于设置的默认画线宽度*屏幕分辨率screenDensity。4.如权利要求1所述的弧线变速运动的动画算法,其特征在于:所述第一个参数,由createArcBounds(arcBounds,i)计算得出,确定圆弧的形状和大小范围,需要针对每个线确定下一个画布区域,创建临时的绘制区域arcBounds,其中intervalWidth+=getStrokeWidth()/(i+1.0f)*1.5f两条线间区域差为上一个线宽度的1.5倍,再根据上一个绘制区域的位置和两条线间的...

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

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

1