private void draw(Point p, Canvas canvas) { if (!isFinished) { path = new Path(); //将向量(0,radius)旋转起始角度,第一个控制点根据这个旋转后的向量计算 Point t = new Point(0, this.radius).rotate(MyUtil.degrad(this.startAngle)); //第一个端点,为了保证圆心不会随着radius增大而变大这里固定为3 Point v1 = new Point(0, 3).rotate(MyUtil.degrad(this.startAngle)); //第二个端点 Point v2 = t.clone().rotate(MyUtil.degrad(this.angle)); //延长线,分别确定两个控制点 Point v3 = t.clone().mult(this.stretchA); Point v4 = v2.clone().mult(this.stretchB); //clone报错 //由于圆心在p点,因此,每个点要加圆心坐标点 v1.add(p); v2.add(p); v3.add(p); v4.add(p); path.moveTo(v1.x, v1.y); //参数分别是:第一个控制点,第二个控制点,终点 path.cubicTo(v3.x, v3.y, v4.x, v4.y, v2.x, v2.y); } canvas.drawPath(path, paint);} |