2011-01-25 3 views
31

Quale unità di misura utilizza Paint.setStrokeWidth() e devo ridimensionare questo valore in base alla densità dello schermo corrente?Quale unità di misura usa Paint.setStrokeWidth()?

È un valore float quindi so che non è un numero di pixel. Deve essere relativo a qualcosa.

Questa è tutta la documentazione dice stesura di questo documento:

Impostare la larghezza per accarezzare. Passa 0 per accarezzare in modalità attaccatura dei capelli. Le linee sottili disegnano sempre un singolo pixel indipendente dalla matrice di canva.

risposta

30

La larghezza del tratto è definita in pixel (sì è un galleggiante, e non c'è alcun problema con l'utilizzo di frazioni di pixel :)

+0

Ciao Romain, ho provato PathEffect esempio dalla ApiDemos e la larghezza del tratto è impostato su 6 lì. Quando misuro la larghezza sullo schermo del mio telefono hdpi è 9px. Sembra che il valore iniziale della larghezza del tratto sia moltiplicato per la densità. Dovrei fornire il valore diviso per densità al fine di ottenere una larghezza reale? – Zzokk

+5

Non credo che la risposta di Romain sia corretta. Sul mio attuale dispositivo di test (HTC One X, con densità di 2.0) ho trovato che '.setStrokeWidth()' deve essere chiamato con la larghezza del tratto desiderata divisa per 1.5. Quindi, la larghezza è esattamente come dovrebbe essere. Altrimenti, è troppo largo. Il fattore 1.5 concorda esattamente con quello che Zzokk ha trovato (6px vs 9px), tranne che mi chiedo se sia legato alla densità, perché One X è 2.0, non 1.5. Quindi l'origine di questo fattore 1.5 mi sta sconcertando in questo momento. – Trevor

+0

Dannazione !! Sono venuto qui per risolvere questo dubbio. Ho visto @Romain Guy rispondere e ho pensato "Abbiamo la risposta di sicuro", ma poi nei commenti non sembra così facile. In ogni caso, ho provato a gestirlo come se fosse una conversione pixel da dp a pixel ... e sembra che funzioni per schermi di dimensioni diverse ... – Sotti

19

setStrokeWidth utilizza pixel. Quindi, per convertirvi dps per pixel per la pittura:

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

Oppure puoi inserire il valore in cui appartiene in - dimens.xml e poi fai semplicemente questo: paint.setStrokeWidth (getContext(). GetResources(). GetDimensionPixelSize (R.dimen.stroke_width)); – slott

+0

Ancora non funziona, i miei tratti sono tutti diversi su dispositivi diversi, qualcuno l'ha riparato ?? – 68060

Problemi correlati