2011-01-25 17 views
31

¿Qué unidad de medida usa Paint.setStrokeWidth() y necesito escalar este valor en función de la densidad de la pantalla actual?¿Qué unidad de medida usa Paint.setStrokeWidth()?

Es un valor flotante, así que sé que no es una cantidad de píxeles. Debe ser relativo a algo.

Esto es todo lo que dice la documentación de este escrito:

establecer el ancho para acariciar. Pase 0 a la carrera en modo rayita. Hairlines siempre dibuja un único píxel independiente de la matriz de canva.

Respuesta

30

la anchura del trazo se define en píxeles (sí, es un flotador, y no hay problema con el uso de fracciones de píxeles :)

+0

Hola Romain, he intentado ejemplo PathEffect de ApiDemos y la anchura del trazo se establece en 6 allí. Cuando mido el ancho en la pantalla de mi teléfono móvil hdpi es 9px. Parece que el valor de ancho de trazo inicial se multiplica por la densidad. ¿Debo proporcionar el valor dividido por densidad para obtener un ancho real? – Zzokk

+5

No creo que la respuesta de Romain sea correcta. En mi dispositivo de prueba actual (HTC One X, con densidad de 2.0) he encontrado que '.setStrokeWidth()' debe llamarse con el ancho de carrera deseado dividido por 1.5. Entonces, el ancho es exactamente como debería ser. De lo contrario, es demasiado ancho. El factor 1.5 está de acuerdo exactamente con lo que encontró Zzokk (6px frente a 9px), excepto que cuestiono si está relacionado con la densidad, porque One X es 2.0, no 1.5. Entonces, el origen de este factor 1.5 me deja perplejo en este momento. – Trevor

+0

Maldita sea! Solo vine aquí para resolver esta duda. Vi a @Romain Guy respondiendo y pensé "Tenemos la respuesta segura", pero en los comentarios no parece tan fácil. De todos modos, he intentado lidiar con esto como si fuera en píxeles como la conversión de dp a píxeles ... y parece estar funcionando para diferentes tamaños de pantalla ... – Sotti

19

setStrokeWidth utiliza píxeles. Así para convertir dps que a los píxeles de la pintura:

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

O puede pegar el valor donde pertenece pertenece - dimens.xml y luego simplemente hacer esto: paint.setStrokeWidth (getContext(). GetResources(). GetDimensionPixelSize (R.dimen.stroke_width)); – slott

+0

Esto todavía no funciona, mis trazos parecen diferentes en diferentes dispositivos, ¿alguien lo solucionó? – 68060

Cuestiones relacionadas