2017-01-21 3 views
2

PaintTextPaintの違いは何ですか? TextPaintはキャンバスにテキストを描画できますか?AndroidのPaintとTextPaintの違いは何ですか?

私は最近キャンバスにテキストを描画する方法を研究しており、それは私にTextPaintをもたらしました。しかし、the source codeを読んでいるうちに、TextPaintにはまったくないことを知って驚いた。実際には、キャンバスにテキストを描画するのに実際には必要ありません。だから、これをもっと明確にするためにQ & Aを追加しています。

答えて

6

TextPaintPaintのサブクラスである。しかし、あなたがこれらの名前から推測することとは反対に、キャンバス上にテキストを描画する重い作業はPaintによって行われます。したがって、この

TextPaint textPaint = new TextPaint(); 
textPaint.setTextSize(50); 
canvas.drawText("some text", 10, 100, textPaint); 

この

Paint paint = new Paint(); 
paint.setTextSize(50); 
canvas.drawText("some text", 10, 100, paint); 

は、実際には同じことを行います。 TextPaintはちょうどPaintの周りの軽いラッパーであり、Androidにはテキストを描画して測定するときに使用するextra dataがあります。 TextLine class source code(このクラスは1行のテキストを描画します)を読むと、これを実際に見ることができます。これは、にStaticLayoutのようなものを作成するときに、Paintオブジェクトではなく、渡す必要があるのは明らかです。

TextPaintフィールド

ドキュメントは、「余分なデータは、」ここにあるものにはかなりまばらで少しより十分な説明です。 Disclamer:TextPaintでこれらの値を変更することで、私は実際にテキストが私のテストで描かれた方法への変更に影響を与えることができなかったので、塩の粒で、このセクションを取る。。)

  • baselineShift - ベースラインは、テキストのベースにあるラインです。イメージについては、this answerを参照してください。 baselineShiftを変更すると、ベースラインが上下に移動するため、テキストが線上に描かれる高さに影響します。
  • bgColor - これはテキストの背後にある背景色です。
  • density - これは画面の密度だと仮定していますが、どのソースコードでも使用されていません。
  • drawableState - 私はPFLAG_DRAWABLE_STATE_DIRTYというフラグを除いてソースコードの多くを見つけることができませんでした。これは、オブジェクトを再描画する必要があるときにオブジェクトに知らせるために使用されると思います。
  • linkColor - これは、リンクのテキストの色という意味でのみ仮定できます。しかし、私はこれがどのソースコードでも使用されていることはわかりませんでした。

注意TextPaint source code

  • Paint source code
    • メモを残したり、任意のより多くの情報を持っている場合は、この答えを更新してください。
  • 関連する問題