2011-01-25 15 views
31

Jaką jednostkę miary używa Paint.setStrokeWidth() i czy muszę skalować tę wartość w oparciu o bieżące nasycenie ekranu?Jaką jednostkę miary używa Paint.setStrokeWidth()?

Jest to wartość zmiennoprzecinkowa, więc wiem, że nie jest to liczba pikseli. Musi być względne do czegoś.

To jest cała dokumentacja mówi, jak to pisze:

Ustaw szerokość do głaskania. Przekaż 0, aby wykonać ruch w trybie włosowatym. Linie proste zawsze rysują pojedynczy piksel niezależnie od matrycy Canva.

Odpowiedz

30

Skok szerokość jest określona w pikselach (tak jest to float, i nie ma problemu z użyciem frakcji pikseli :)

+0

Hi Romain, próbowałem przykład PathEffect z ApiDemos a szerokość udar jest ustawiony na 6 tam. Kiedy mierzę szerokość na ekranie telefonu komórkowego hdpi, to 9px. Wygląda na to, że początkowa wartość szerokości obrysu jest mnożona przez gęstość. Czy powinienem podać wartość podzieloną przez gęstość, aby uzyskać rzeczywistą szerokość? – Zzokk

+5

Nie wierzę, że odpowiedź Romaina jest poprawna. Na moim obecnym urządzeniu testowym (HTC One X, o gęstości 2,0) stwierdziłem, że '.setStrokeWidth()' musi być wywołane z żądaną szerokością skoku podzieloną przez 1,5. Następnie szerokość jest dokładnie taka jaka powinna być. W przeciwnym razie jest zbyt szeroki. Współczynnik 1,5 zgadza się dokładnie z tym, co Zzokk znalazł (6px vs 9px), z wyjątkiem tego, że pytanie dotyczy gęstości, ponieważ One X wynosi 2.0, a nie 1.5. Tak więc pochodzenie tego czynnika 1.5 zastanawia mnie w tej chwili. – Trevor

+0

Cholera !! Przyszedłem tutaj, aby rozwiązać tę wątpliwość. Widziałem, jak @Rainain Guy odpowiadał i myślałem "Mamy odpowiedź na pewno", ale w komentarzach nie wydaje się to takie łatwe. W każdym razie próbowałem sobie z tym poradzić, jak gdyby tam, gdzie piksele takie jak konwertowanie z dp na piksele ... i wygląda na to, że działają dla różnych rozmiarów ekranu ... – Sotti

19

setStrokeWidth używa pikseli. Więc przekonwertować ci dps na piksele na obrazie:

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

Lub możesz umieścić wartość gdzie indziej - dimens.xml, a następnie po prostu wykonaj to: paint.setStrokeWidth (getContext(). GetResources(). GetDimensionPixelSize (R.dimen.stroke_width)); – slott

+0

To nadal nie działa, moje ruchy wyglądają inaczej na różnych urządzeniach, ktoś go naprawił? – 68060

Powiązane problemy