1.贝塞尔二阶曲线
如下图,由起始点A,控制点C,终点B;
在AC上找到一点D,BC上找到一点E,使AD/DC=CE/EB;
连接DE找到一点F使AD/DC=CE/EB=DF/FE;
F即为贝塞尔曲线上一点。
2.Android绘制贝塞尔二阶曲线
Path里面有两个方法可以进行贝塞尔二阶曲线:
//默认起始点 (0,0),控制点(x1,y1),终点(x2,y2)
public void quadTo(float x1, float y1, float x2, float y2) {
isSimplePath = false;
nQuadTo(mNativePath, x1, y1, x2, y2);
}
//相对于上一个控制点(oldX,oldY)的偏移(oldX+dx1,oldY+dy1),相对于上一个终点(x1,y1)的偏移(x1+dx1,y2+dy2)
public void rQuadTo(float dx1, float dy1, float dx2, float dy2) {
isSimplePath = false;
nRQuadTo(mNativePath, dx1, dy1, dx2, dy2);
}
根据这个即可绘制曲线图:
代码如下
public class WaveView extends View {
private Path mPath;
private Path mLinePath;
private Paint mPaintBezier;
private Paint mPaintLine;
private int mWaveLength;
private int mScreenWidth;
private int mWaveCount;
private ValueAnimator mValueAnimator = null;
private int mOffsetX;
private int mOffsetY;
public WaveView(Context context) {
super(context);
}
public WaveView(Context context, AttributeSet attrs) {
super(context, attrs);
mPaintBezier = new Paint(Paint