Android中贝塞尔曲线的使用

Android中主要在onDraw方法中使用quadTo & cubicTo 画二次和三次贝塞尔曲线;

绘制贝塞尔曲线一般会结合moveTo一起使用,

    path.reset();
    path.moveTo(start.x,start.y);
    path.quadTo(control.x,control.y,end.x,end.y);
    canvas.drawPath(path, mPaint);

    //二阶1个控制点,三阶2个控制点.
    path.moveTo(start.x, start.y);
    path.cubicTo(control1.x, control1.y, control2.x,control2.y, end.x, end.y);

使用中,我们常常不仅仅是画一条曲线,而是曲线和直线一起拼图/剪切画布。这里着重提一下ClipPath切了画布后有锯齿,从How to draw smooth / rounded path? 获取解决方案是,在drawBitmap的同时也drawPath,让圆滑的path补贴锯齿边缘,就光滑了.

    mPaint.setColor(Color.RED);
    mPaint.setStrokeWidth(8);
    mPaint.setDither(true);
    mPaint.setStyle(Paint.Style.STROKE);
    mPaint.setStrokeJoin(Paint.Join.ROUND);
    mPaint.setStrokeCap(Paint.Cap.ROUND);
    mPaint.setPathEffect(new CornerPathEffect(10));
    mPaint.setAntiAlias(true);

    path.reset();
    path.moveTo(0, 0);
    path.lineTo(start.x, start.y);
    path.quadTo(control.x, control.y, end.x, end.y);
    path.lineTo(end.x, 0);
    path.lineTo(0, 0);
    canvas.drawPath(path, mPaint);

    mPaint.setColor(mColor);
    mPaint.setStyle(Paint.Style.FILL);
    mPaint.setAntiAlias(true);
    canvas.clipPath(path);//裁剪画布
    canvas.drawBitmap(bitmap,null,rect,mPaint);

应该还有其他方式去掉锯齿,弄明白了后续补充。


关于贝塞尔曲线的来龙去脉、计算公式等等,前人有好的图文,不在这里粘贴了,见参考文献。
文献1讲解的比较全面实用,直接链接过去看就行,文献2让自己动手画线有点趣味性,文献5和6是实例可以练手。

参考文献:
1.Path之贝塞尔曲线 这一篇非常适合进入状态,看了就懂,看了就能上手做;
2.The Bezier Game 这里可以练习photoshop(sketch)这些绘图软件中的钢笔工具(Vector),自己动手连线,体会贝塞尔曲线的形成 (画不出来好揪心,对于控制点把握不好);
3.基于贝塞尔曲线的Android动画差值器 介绍了贝塞尔曲线的由来,算法公式,动画差值器的代码实现;
4.Android中moveTo、lineTo、quadTo、cubicTo、arcTo详解(实例)
5.三次贝塞尔曲线练习之弹性的圆 是个好玩的实例;
6.MetaballLoading 另一个实例;
7.如何获取控制点 stackoverflow How to create circle with Bézier curves?, 不得不说,数学是美的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值