Линия холста Android - PullRequest
       24

Линия холста Android

0 голосов
/ 27 июня 2019

Я пытаюсь нарисовать закругленную линию определенной ширины на моем растровом изображении imageView.

Итак, я нарисовал простую линию с paintLine.strokeCap = Paint.Cap.ROUND и без этой опции.

Вотрезультат:

Deferences between two type of lines

Первый округлен, и вы можете видеть, что он больше нижнего.

Вот код Iиспользовать.

    val paintLine = Paint()
    paintLine.color = Color.WHITE
    paintLine.style = Paint.Style.FILL_AND_STROKE
    paintLine.strokeWidth = 40.0f
    paintLine.strokeCap = Paint.Cap.ROUND

    val workingBitmap = Bitmap.createBitmap(bitmap)
    val mutableBitmap = workingBitmap.copy(Bitmap.Config.ARGB_8888, true)

    val drawingBitmapCanvas = Canvas(mutableBitmap)

    drawingBitmapCanvas.apply {
        drawLine(300, 300, 400, 300, paintLine)
    }

Хотелось бы узнать, есть ли способ сохранить одинаковую ширину с закругленной линией?

Спасибо.

1 Ответ

1 голос
/ 27 июня 2019

Это просто требует немного математики с вашей стороны.Закругленные колпачки обводки, которые добавляются к линии, имеют ширину / длину, равную половине обводки краски.

Вот мой код:

Paint linePaint =  new Paint();
Paint noCaplinePaint =  new Paint();

public void init(){
    linePaint.setColor(this.getResources().getColor(android.R.color.black));
    linePaint.setStyle(Paint.Style.FILL_AND_STROKE);
    linePaint.setStrokeWidth(40f);
    linePaint.setStrokeCap(Paint.Cap.ROUND);

    noCaplinePaint.setColor(this.getResources().getColor(android.R.color.black));
    noCaplinePaint.setStyle(Paint.Style.FILL_AND_STROKE);
    noCaplinePaint.setStrokeWidth(40f);
}

И затем в onDraw:

canvas.drawLine(50f, 40f, 300f, 40f, noCaplinePaint);
canvas.drawLine(70f, 81f, 280f, 81f, linePaint);

Производит эти строки:

Produced Lines

Итак, для обзора, размер закругленной линии крышки можетрассчитывается следующим образом:

additionalLengthFromRoundCap = lineStrokeWidth/2

, и этот предел будет добавлен к обоим концам линии, поэтому линия будет на strokeWidth единицы длиннее, чем нарисовано.

...