Ответ 1
Ширина хода определяется в пикселях (да, это float, и нет проблем с использованием доли пикселей:)
Какая единица измерения использует Paint.setStrokeWidth() и нужно ли масштабировать это значение на основе текущей плотности экрана?
Это значение float, поэтому я знаю, что это не число пикселей. Это должно быть относительно чего-то.
Это все документация, на которой написано:
Установите ширину для поглаживания. Пройдите 0 до хода в режиме волоса. Волосы всегда рисуют один пиксель, не зависящий от матрицы canva.
Ширина хода определяется в пикселях (да, это float, и нет проблем с использованием доли пикселей:)
setStrokeWidth использует пиксели. Итак, чтобы преобразовать dps в пиксели для рисования:
int dpSize = 10;
DisplayMetrics dm = getResources().getDisplayMetrics() ;
float strokeWidth = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dpSize, dm);
paint.setStrokeWidth(strokeWidth);
Если вы пытаетесь 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.]