private static final int SIN_HEIGHT = (int) Util.dp2px(100);
private static final int SIN_PERIOD = (int) Util.dp2px(100);
private void setPathData() {
// 1、复位 清空一次路径
path.reset();
int linePos = getHeight()/2; // 正弦函数在Y轴上的位置
for (int i = 0; i < getWidth()/SIN_PERIOD; i++) {
int x0 = i*SIN_PERIOD; // 计算 P0 点坐标
int y0 = linePos;
int x1 = SIN_PERIOD/4 + x0; // 计算 P1 点坐标
int y1 = y0+SIN_HEIGHT/2;
int x2 = x0 + SIN_PERIOD/2; // 计算 P2 点坐标
int y2 = linePos;
int x3 = SIN_PERIOD*3/4+x0; // 计算 P3 点坐标
int y3 = linePos-SIN_HEIGHT/2;
int x4 = x0+SIN_PERIOD; // 计算 P4 点坐标
int y4 = linePos;
path.moveTo(x0, y0);
path.quadTo(x1, y1, x2, y2); // 绘制贝塞尔曲线,需要注意的是,起始点为(x0,y0),控制点(x1,y1),结束点(x2,y2)
path.quadTo(x3, y3, x4, y4); // 第二个贝塞尔曲线是在上一个的结束点开始的,此时,起始点(x2,y2),控制点(x3,y3),结束点(x4,y4)
}
// path.close();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
setPathData();
canvas.drawPath(path, paint2);
}
评论