如何绘制曲线线条

时间:2017-02-17 17:43:41

标签: java android draw

拜托,有人可以帮我在A点(720,1140)中间的圆圈和B点(375,490)之间用红色绘制这条线

enter image description here

 Bitmap bitmap = Bitmap.createBitmap((int) getWindowManager()
            .getDefaultDisplay().getWidth(), (int) getWindowManager()
            .getDefaultDisplay().getHeight(), Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(bitmap);
    drawingImageView.setImageBitmap(bitmap);
    DisplayMetrics metrics = this.getResources().getDisplayMetrics();
    int x = metrics.widthPixels;
    int y = metrics.heightPixels;
    Paint paint1 = new Paint () ;
    paint1.setStrokeWidth(10);
    int margin = 100;
    int margin1 = 300;
    int top = 0 + margin;
    int bottom = canvas.getHeight() - margin;
    int left = 0 + margin1;
    int right = canvas.getWidth() - margin1;
    int centerX = x / 2;
    int centerY = y / 2;
    canvas.drawCircle(x / 2, y / 2, 50, paint1);
    canvas.drawLine(centerX, top, centerX, bottom,paint1);
    canvas.drawLine(left, centerY, right, centerY,paint1);

1 个答案:

答案 0 :(得分:1)

这是我做的:

  • 找到2个给定点之间的点
  • 计算2点之间的角度90度
  • 使用之前计算的度数计算中点的X点像素。
  • 使用" path.cubicTo"这3点(负面和正面) 值以确定线应该弯曲的方式。)

这是我的代码!

public PaintApplication drawCurve(int x1, int y1, int x2, int y2, int curveRadius, int padding, int color, int lineWidth) {

        Paint paint  = new Paint();
        paint.setAntiAlias(true);
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeWidth(lineWidth);
        paint.setColor(ContextCompat.getColor(context, color));

        final Path path = new Path();
        int midX            = x1 + ((x2 - x1) / 2);
        int midY            = y1 + ((y2 - y1) / 2);
        float xDiff         = midX - x1;
        float yDiff         = midY - y1;
        double angle        = (Math.atan2(yDiff, xDiff) * (180 / Math.PI)) - 90;
        double angleRadians = Math.toRadians(angle);
        float pointX        = (float) (midX + curveRadius * Math.cos(angleRadians));
        float pointY        = (float) (midY + curveRadius * Math.sin(angleRadians));

        path.moveTo(x1, y1);
        path.cubicTo(x1,y1,pointX, pointY, x2, y2);
        canvas.drawPath(path, paint);

        return this;
    }

我基于这种编码思想创建了一个Paint应用程序。

有关屏幕截图,请参阅here

希望这会有所帮助!!