Android
ペイント
サーチ…
前書き
ペイントは、キャンバス(描画呼び出しを保持する)、ビットマップ(ピクセルを保持する)、描画プリミティブ(Rect、Path、Bitmap ...)と共に、描画に必要な4つのオブジェクトの1つです。
ペイントの作成
次の3つのコンストラクタのいずれかを使用して新しいペイントを作成できます。
-
new Paint()デフォルト設定で作成 -
new Paint(int flags)作成 -
new Paint(Paint from)別のペイントから設定をコピーする
パフォーマンス上の問題を引き起こす可能性があるので、paintオブジェクトやonDraw()内の他のオブジェクトを決して作成しないことをお勧めします。 (Android Studioはおそらくあなたに警告します)代わりに、グローバルにして、クラスコンストラクタで次のように初期化します。
public class CustomView extends View {
private Paint paint;
public CustomView(Context context) {
super(context);
paint = new Paint();
//...
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
paint.setColor(0xFF000000);
// ...
}
}
テキスト用のペイントの設定
テキスト描画設定
-
setTypeface(Typeface typeface)フォントフェイスを設定します。 書体を参照してください -
setTextSize(int size)フォントサイズをピクセル単位で設定します。 -
setColor(int color)テキストの色を含め、塗りの描画色を設定します。setARGB(int a, int r, int g, int b、setAlpha(int alpha)使用することもできます。 -
setLetterSpacing(float size)文字間の間隔をemで設定します。デフォルト値は0で、負の値はテキストを引き締め、正の値はテキストを引き締めます。 -
setTextAlign(Paint.Align align)原点を基準にしてテキストの配置を設定します。Paint.Align.LEFTは原点のRIGHTに描画し、RIGHTは左に描画し、CENTERは原点の中心に描画します(水平方向) -
setTextSkewX(float skewX)これは、偽の斜体と見なすことができます。 SkewXは、テキストのボトムの水平オフセットを表します。 (斜体は-0.25を使用してください) -
setStyle(Paint.Style style)テキストをFILL、ストロークテキストをSTROKE、または両方をFILL_AND_STROKE
SPまたはDPからピクセルに変換するにはTypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, size, getResources().getDisplayMetrics())を使用できます。
テキストの測定
-
float width = paint.measureText(String text)の幅を測定する -
float height = paint.ascent()テキストの高さを測定する -
paint.getTextBounds(String text, int start, int end, Rect boundsテキストの寸法をpaint.getTextBounds(String text, int start, int end, Rect boundsを割り当てる場合、nullにすることはできません。
String text = "Hello world!";
Rect bounds = new Rect();
paint.getTextBounds(text, 0, text.length(), bounds);
他の測定方法もありますが、これらの3つはほとんどの目的に適合します。
シェイプを描画するためのペイントの設定
-
setStyle(Paint.Style style)塗りつぶし形状FILL、ストロークシェイプSTROKE、または両方FILL_AND_STROKE -
setColor(int color)ペイントの描画色を設定します。setARGB(int a, int r, int g, int b、setAlpha(int alpha)使用することもできます。 -
setStrokeCap(Paint.Cap cap)ROUND、SQUARE、またはBUTTいずれかのラインキャップを設定します(none) これを参照してください。 -
setStrokeJoin(Paint.Join join)行結合をMITER(BEVEL)、ROUND、またはBEVELいずれかに設定します。 これを見てください。 -
setStrokeMiter(float miter)マイター結合の制限を設定します。これにより、マイター結合が不定期に進行するのを防ぎ、xピクセル後にベベル結合に変換することができます。 これを見てください。 -
setStrokeWidth(float width)ストロークの幅を設定します。0は、キャンバスマトリックスとは独立したヘアラインモードで描画します。 (常に1ピクセル)
フラグの設定
コンストラクタで、またはsetFlags(int flags)をsetFlags(int flags)して、次のフラグを設定できます。
-
Paint.ANTI_ALIAS_FLAGアンチエイリアスを有効にし、図面を滑らかにします。 -
Paint.DITHER_FLAGディザリングを有効にします。色精度がデバイスの色精度よりも高い場合は、 これが発生します。 -
Paint.EMBEDDED_BITMAP_TEXT_FLAGビットマップフォントの使用を有効にします。 -
Paint.FAKE_BOLD_TEXT_FLAGは、太字のフェイスを使用する代わりに、偽の太いエフェクトを使用してテキストを描画します。いくつかのフォントは太字になっており、 偽の太字では表示されません -
Paint.FILTER_BITMAP_FLAG変換時のビットマップのサンプリングに影響します。 -
Paint.HINTING_OFF、Paint.HINTING_ON切り替えフォントヒンティングは、参照、これを -
Paint.LINEAR_TEXT_FLAGフォントのスケーリングを無効にし、描画操作をスケーリングする -
Paint.SUBPIXEL_TEXT_FLAGテキストは、サブピクセルの精度で計算されます。 -
Paint.STRIKE_THRU_TEXT_FLAG描画されたテキストがストライクされます。 -
Paint.UNDERLINE_TEXT_FLAG描画されるテキストに下線が引かれます
フラグを追加して次のようなフラグを削除することができます:
Paint paint = new Paint();
paint.setFlags(paint.getFlags() | Paint.FLAG); // Add flag
paint.setFlags(paint.getFlags() & ~Paint.FLAG); // Remove flag
そこにないフラグを削除しようとしているか、すでにあるフラグを追加しても何も変更されません。また、ほとんどのフラグはset<Flag>(boolean enabled)を使用してset<Flag>(boolean enabled)することもできますset<Flag>(boolean enabled) setAntialias(true) 。
paint.reset()を使用して、ペイントをデフォルト設定にリセットすることができます。唯一のデフォルトフラグはEMBEDDED_BITMAP_TEXT_FLAGです。 new Paint(0)を使用しても設定されますが、