Подтвердить что ты не робот

Какая единица измерения использует Paint.setStrokeWidth()?

Какая единица измерения использует Paint.setStrokeWidth() и нужно ли масштабировать это значение на основе текущей плотности экрана?

Это значение float, поэтому я знаю, что это не число пикселей. Это должно быть относительно чего-то.

Это все документация, на которой написано:

Установите ширину для поглаживания. Пройдите 0 до хода в режиме волоса. Волосы всегда рисуют один пиксель, не зависящий от матрицы canva.

4b9b3361

Ответ 1

Ширина хода определяется в пикселях (да, это float, и нет проблем с использованием доли пикселей:)

Ответ 2

setStrokeWidth использует пиксели. Итак, чтобы преобразовать dps в пиксели для рисования:

        int dpSize =  10;
        DisplayMetrics dm = getResources().getDisplayMetrics() ;
        float strokeWidth = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dpSize, dm);
        paint.setStrokeWidth(strokeWidth);

Ответ 3

Если вы пытаетесь onDraw собственную "рамку холста", вам следует иметь в виду, что даже обводка обрезается. Так

paint.style = Paint.Style.STROKE
rect.set(0, 0, width, height)
paint.strokeWidth = 10F
canvas.drawRect(rect, paint)

приведет к "границе" шириной всего 5F. Это происходит из-за того, что обводка центрируется по прямоугольнику, который в данном случае является краем холста - в результате половина его фактически обрезается, когда выходит за пределы холста.

Чтобы это исправить, просто умножьте желаемую толщину strokeWidth = 20F на 2. [В приведенном выше примере вы установили значение strokeWidth = 20F и "увидели бы" толщину 10F.]