2011-01-25 4 views
31

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

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

Это вся документация говорит, как из этого письма:

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

ответ

30

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

+0

Привет Romain, я попытался пример PathEffect из ApiDemos и ширина хода устанавливается в 6 там. Когда я измеряю ширину на экране мобильного телефона hdpi, это 9 пикселей. Похоже, что начальное значение ширины штриха умножается на плотность. Должен ли я предоставить значение, деленное на плотность, чтобы получить реальную ширину? – Zzokk

+5

Я не верю, что ответ Ромена верен. На моем текущем тестовом устройстве (HTC One X, с плотностью 2,0) я обнаружил, что '.setStrokeWidth()' необходимо вызвать с желаемой шириной штриха, разделенной на 1,5. Тогда ширина точно такая же, как и должна быть. В противном случае он слишком широк. Коэффициент 1.5 согласуется точно с тем, что Zzokk нашел (6px vs 9px), за исключением того, что я задаю вопрос, связан ли он с плотностью, потому что One X равен 2.0, а не 1.5. Итак, начало этого фактора в 1.5 раз меня озадачивает. – Trevor

+0

Черт! Я просто пришел сюда, чтобы решить это сомнение. Я видел, как @Romain Guy отвечал, и я подумал: «У нас есть ответ наверняка», но в комментариях это выглядит не так просто. В любом случае я попытался справиться с этим, как если бы там, где пиксели, такие как преобразование из dp в пиксели ... и, похоже, работают для разных размеров экрана ... – Sotti

19

setStrokeWidth использует пиксели. Так конвертировать вам дпс в пикселах для живописи:

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

Или вы можете вставить значение, в котором in принадлежит - dimens.xml, а затем просто выполните это: paint.setStrokeWidth (getContext(). GetResources(). GetDimensionPixelSize (R.dimen.stroke_width)); – slott

+0

Это все еще не работает, мои штрихи все разные на разных устройствах, кто-нибудь исправил его? – 68060

Смежные вопросы