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); }
评论