一、简介
关于贝塞尔曲线(百度百科)的定义,很多博客都有着详细的介绍,本篇博客来关注具体的实现过程。
首先来看2阶、3阶贝塞尔曲线的效果图
接下来,看具体的实现过程。
项目地址:https://github.com/zhangtiansimple/AndroidBasis
二、二阶贝塞尔曲线
要想画出二阶贝塞尔曲线,首先需要定义两个坐标点和一个控制点,然后是画笔路径等。
private Paint mPaint, mTextPaint;
private Path mPath;
private PointF mFirstPoint, mSecondPoint, mControlPoint;
接着在onSizeChanged方法中为坐标点赋值
int centerX = w / 2;
int centerY = h / 2;
//给数据点和控制点赋值
mFirstPoint.x = centerX - 300;
mFirstPoint.y = centerY;
mSecondPoint.x = centerX + 300;
mSecondPoint.y = centerY;
mControlPoint.x = centerX;
mControlPoint.y = centerY - 300;
然后就是绘制,需要重点关注的是quadTo方法,我们画了两条辅助线来显示贝塞尔曲线的控制点的效果
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
mPath.reset();
float radius = 8f;
canvas.drawCircle(mFirstPoint.x, mFirstPoint.y, radius, mTextPaint);
canvas.drawCircle(mSecondPoint.x, mSecondPoint.y, radius, mTextPaint);
canvas.drawCircle(mControlPoint.x, mControlPoint.y, radius, mTextPaint);
canvas.drawText("坐标点1", mFirstPoint.x + 10, mFirstPoint.y + 10, mTextPaint);
canvas.drawText("坐标点2"