2011-01-25 29 views
31

Paint.setStrokeWidth()はどの単位を使用しますか?また、現在の画面密度に基づいてこの値をスケールする必要がありますか?Paint.setStrokeWidth()はどの単位を使用しますか?

これは浮動小数点値なので、ピクセル数ではありません。それは何かに相対的でなければなりません。

これは、すべてのドキュメントは、これを書いてこう述べています。

をなでるために幅を設定します。ヘアラインモードで0をストロークに渡します。ヘアラインは常にキャンバのマトリックスとは独立した単一のピクセルを描画します。

答えて

30

ストローク幅は(はい、それはフロートだ、画素を使用:)

+0

こんにちはロマンは、私がApiDemosからPathEffect例を試してみたし、ストローク幅はそこに6に設定されています。私はhdpi携帯電話の画面上の幅を測定すると9pxです。最初のストロークの幅の値に密度を乗じたように見えます。実際の幅を得るために、値を密度で割った値を与える必要がありますか? – Zzokk

+5

私はローマンの答えが正しいとは思わない。私の現在のテストデバイス(2.0の密度を持つHTC One X)では、 '.setStrokeWidth()'は、1.5で割ったストローク幅で呼び出さなければならないことがわかりました。それから、幅はまさにそうなるはずです。そうでなければ、それは広すぎます。 1.5ファクターは、Zxokkが見つけたもの(6px vs 9px)と正確に一致します。ただし、密度が関連しているかどうかは疑問ですが、One Xは1.5ではなく2.0であるためです。したがって、この1.5因子の起源は今私を困惑させています。 – Trevor

+0

くそー!私はこの疑問を解決するためにここに来ました。私は@Romain Guyの返事を見ました。私は「私たちは確かに答えました」と考えましたが、コメントではそれほど簡単ではないようです。 とにかくピクセルがdpからピクセルに変換されるような場所であれば、それを処理しようとしました...そして、異なる画面サイズで動作しているようです... – Sotti

19

setStrokeWidth画素の画分を使用しても問題はありませんピクセル単位で定義されています。 だから、絵のためにピクセルにあなたのDPSを変換するには:

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

または、 - dimens.xmlが所属する場所に値をスティックし、次にこれを単に行うことができます:paint.setStrokeWidth(getContext()。getResources()。getDimensionPixelSize(R.dimen.stroke_width)); – slott

+0

これはまだ動作しません、私のストロークはすべて異なったデバイスで異なって見えます。 – 68060

関連する問題