canvas教程

Canvas与ValueAnimator(3)

字号+ 作者:H5之家 来源:H5之家 2017-04-28 18:00 我要评论( )

分解步骤,计算一下总共需要的角度: 1、一个笑脸,x轴下方的圆弧旋转135°,覆盖2个点,此过程中圆弧增加45° 2、画布旋转135°,此过程中圆弧增加45° 3、画布旋转360°,此过程中圆弧减少360/5度 4、画布旋转90°

分解步骤,计算一下总共需要的角度:
1、一个笑脸,x轴下方的圆弧旋转135°,覆盖2个点,此过程中圆弧增加45°
2、画布旋转135°,此过程中圆弧增加45°
3、画布旋转360°,此过程中圆弧减少360/5度
4、画布旋转90°,此过程中圆弧减少90/5度
5、画布旋转135°,释放覆盖的2个点

动画部分:

[代码]java代码: private ValueAnimator animator; private float animatedValue; private long animatorDuration = 5000; private TimeInterpolator timeInterpolator = new DecelerateInterpolator(); private void initAnimator(long duration){ if (animator !=null &&animator.isRunning()){ animator.cancel(); animator.start(); }else { animator=ValueAnimator.ofFloat(0,855).setDuration(duration); animator.setInterpolator(timeInterpolator); animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { animatedValue = (float) animation.getAnimatedValue(); invalidate(); } }); animator.start(); } }


表情部分:在绘制前最好使用sava()方法保存当前的画布状态,在结束后使用restore()恢复之前保存的状态。
为了是表情看上去更自然,所以减少10°的初始角度

[代码]java代码: private void doubanAnimator(Canvas canvas, Paint mPaint){ mPaint.setStyle(Paint.Style.STROKE);//描边 mPaint.setStrokeCap(Paint.Cap.ROUND);//圆角笔触 mPaint.setColor(Color.rgb(97, 195, 109)); mPaint.setStrokeWidth(15); float point = Math.min(mViewWidth,mViewWidth)*0.06f/2; float r = point*(float) Math.sqrt(2); RectF rectF = new RectF(-r,-r,r,r); canvas.save(); // rotate if (animatedValue>=135){ canvas.rotate(animatedValue-135); } // draw mouth float startAngle=0, sweepAngle=0; if (animatedValue<135){ startAngle = animatedValue +5; sweepAngle = 170+animatedValue/3; }else if (animatedValue<270){ startAngle = 135+5; sweepAngle = 170+animatedValue/3; }else if (animatedValue<630){ startAngle = 135+5; sweepAngle = 260-(animatedValue-270)/5; }else if (animatedValue<720){ startAngle = 135-(animatedValue-630)/2+5; sweepAngle = 260-(animatedValue-270)/5; }else{ startAngle = 135-(animatedValue-630)/2-(animatedValue-720)/6+5; sweepAngle = 170; } canvas.drawArc(rectF,startAngle,sweepAngle,false,mPaint); // draw eye canvas.drawPoints(new float[]{ -point,-point ,point,-point },mPaint); canvas.restore(); }


在调试完成之后就可以删除,坐标系部分的代码了

笑脸动画

三、小结

本文介绍了canvas的变化,文中的不同部分穿插说明了canvas绘制各种图形的方法,以及结合ValueAnimator制作的豆瓣加载动画。之后的一篇文章会主要分析字符串的长度和宽度,根据这些来参数调整字符串的位置,以达到居中等效果,再后一篇文章内容应该就会编写PieChart了。如果在阅读过程中,有任何疑问与问题,欢迎与我联系。
GitHub:https://github.com/Idtk

推荐:

Android事件分发机制源码解析

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 21天学习android开发教程之SurfaceView与多线程的混搭

    21天学习android开发教程之SurfaceView与多线程的混搭

    2017-04-27 12:00

  • Android开发基本常识及技巧

    Android开发基本常识及技巧

    2017-04-13 16:02

  • H5拍照应用开发经历的那些坑儿

    H5拍照应用开发经历的那些坑儿

    2017-04-09 18:05

  • Android开发学习之ImageView手势拖拽、缩放、旋转

    Android开发学习之ImageView手势拖拽、缩放、旋转

    2017-03-27 11:00

网友点评
m