2011-01-25 15 views
31

Paint.setStrokeWidth() hangi ölçü birimini kullanır ve bu değeri geçerli ekran yoğunluğuna göre ölçeklendirmem gerekir?Paint.setStrokeWidth() hangi ölçü birimini kullanır?

Float değeri bu yüzden bir dizi piksel olmadığını biliyorum. Bir şeye göreli olmalı.

budur tüm belgeler bu yazı olarak diyor ki:

okşayarak genişliğini ayarlayın. 0 çizgisi modunda felç geçirin. Saç çizgileri, her zaman canva matrisinden bağımsız tek bir piksel çizer.

cevap

30

vuruş genişliği (Evet, bir şamandıra, ve piksel kullanır :)

+0

Merhaba Romain, ben ApiDemos gelen PathEffect örnek denedim ve çizgi genişliği orada 6'ya ayarlanır. Hdpi cep telefonu ekranımdaki genişliğini ölçtüğümde 9px. İlk vuruş genişliği değerinin yoğunluk tarafından çarpıldığına benziyor. Gerçek genişliği elde etmek için yoğunluğa göre bölünmüş değer sağlamalı mıyım? – Zzokk

+5

Roma’nın cevabının doğru olduğuna inanmıyorum. Benim mevcut test cihazımda (HTC One X, 2.0 yoğunluğu ile) .setStrokeWidth() 'nin, istenen vuruş genişliğinin 1,5'e bölünmesiyle çağrılması gerektiğini buldum. Daha sonra, genişlik olması gerektiği gibi. Aksi halde çok geniş. 1,5 faktör Zzokk'un (6px vs 9px) bulduğu ile tam olarak aynı fikirde, eğer yoğunluğa bağlıysa, One X 2.0, 1.5 değil. Yani bu 1.5 faktörün kaynağı şu an beni şaşırtmaktır. – Trevor

+0

Lanet olsun! Bu şüpheyi çözmek için buraya geldim. @Romain Guy'ın yanıtını gördüm ve "Kesinlikle cevabımız var" diye düşündüm, ancak yorumlarda bu kadar kolay görünmüyordu. Her neyse, sadece piksellerin dp'den piksellere dönüştürülmesi gibi ... ve farklı ekran boyutları için çalışıyormuş gibi davranmayı denedim ... – Sotti

19

setStrokeWidth piksel fraksiyonlar kullanarak herhangi bir problem yoktur piksel olarak tanımlanır. Bu tablonun için piksellere size dps dönüştürmek için:

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

Ya da ait olduğu değeri - dimens.xml içinde yapıştırıp sonra bunu yapabilirsiniz: paint.setStrokeWidth (getContext(). GetResources(). GetDimensionPixelSize (R.dimen.stroke_width)); – slott

+0

Bu hala çalışmıyor, vuruşumların hepsi farklı cihazlarda farklı görünüyor, herkes düzeltildi mi? – 68060

İlgili konular