2014-03-19 55 views
0

如何在画布上绘制贝塞尔曲线。如果我知道所有点的坐标和它们的枢轴。Android - 在画布上绘制贝塞尔曲线

class BezierPoint { 
    float pivot_one_x, pivot_one_y; 
    float pivot_two_x, pivot_two_y; 
    float point_x, point_y; 
} 

现在我有这个类的数组:

BezierPoint [] points = {...}; 

,现在我想提请整条生产线:从points[0]points[1]points[1]points[2],...

是机器人有Path.cubicTo().lineTo().quadTo()...,但我不知道如何转换bezier点与Path正确工作?

+0

你有没有尝试任何与路径? – pskink

+0

我尝试使用cubicTo(..)贝塞尔曲线,但它不起作用 – Michal

+0

和quadTo? – pskink

回答

1
 private Paint paintBezBase; 

      //control variables 
       int xControl1 = 0; 
       int yControl1 = 0; 

       int xControl2 = 0; 
       int yControl2 = 0; 

       // 
       int x1 = 0; 
       int y1 = 0; 
       int x2 = 0; 
       int y2 = 0; 
       Path pathProgress = new Path(); 




     private void init(AttributeSet attrs, int defStyle) { 
       paintBezBase = new Paint() { 
          { 
           setStyle(Style.STROKE); 
           setStrokeCap(Cap.SQUARE); 
           setStrokeWidth(1); 
           setAntiAlias(true); 
          } 
         }; 

       paintBezBase.setColor(Color.BLACK); 
       paintBezBase.setStrokeWidth(1); 
     } 

    @Override 
     protected void onDraw(Canvas canvas) { 
      super.onDraw(canvas); 

     int paddingLeft = getPaddingLeft(); 
     int paddingTop = getPaddingTop(); 
     int paddingRight = getPaddingRight(); 
     int paddingBottom = getPaddingBottom(); 

     contentWidth = getWidth() - paddingLeft - paddingRight; 
     contentHeight = getHeight() - paddingTop - paddingBottom; 

     x1 = 0; 
     y1 = contentHeight/2; 
     x2 = contentWidth; 
     y2 = contentHeight/2; 

     yControl1 = 0 - 40; 
     yControl2 = contentHeight + 40; 

     pathProgress.moveTo(x1, y1); 
     pathProgress.cubicTo(xControl1, yControl1, xControl2, yControl2, x2, y2); 
       canvas.drawPath(pathProgress, paintBezBase); 



    } 

用yControl1调整曲线& yControl2。