【问题标题】:Android - Draw bezier curve on CanvasAndroid - 在 Canvas 上绘制贝塞尔曲线
【发布时间】:2014-03-19 13:59:23
【问题描述】:

如何在画布上绘制贝塞尔曲线。如果我知道所有点的坐标及其枢轴。

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],...

是的,android 有Path.cubicTo().lineTo().quadTo()...,但我不知道如何将贝塞尔点转换为正确使用Path

【问题讨论】:

  • 你尝试过使用 Paths 吗?
  • 我尝试使用带有贝塞尔曲线的cubicTo(..),但它不起作用
  • 那么 quadTo 呢?

标签: android vector android-canvas


【解决方案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 调整曲线。

【讨论】:

  • pathProgress.reset() at onDraw()
猜你喜欢
  • 2015-12-30
  • 1970-01-01
  • 1970-01-01
  • 2011-02-26
  • 1970-01-01
  • 2013-08-21
  • 1970-01-01
  • 2014-09-29
  • 2017-05-18
相关资源
最近更新 更多