PaintTextPaint有什么区别?只能将文本绘制到画布上?
我最近一直在研究如何在画布上绘制文本,这让我TextPaint。然而,当我阅读the source code时,我惊讶地发现TextPaint一点也不重要。实际上,你并不需要它来在画布上绘制文本。所以我加上这个问答是为了更清楚地说明这一点。

最佳答案

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(这个类绘制一行文本),您可以看到这个操作。这就是为什么在创建类似TextPaint的对象时必须传入Paint而不是StaticLayout对象的原因。
文本绘制字段
关于什么是“额外数据”的文档非常少,这里有一个更完整的解释。(disclamer:通过在TextPaint中更改这些值,我实际上无法影响在测试中如何绘制文本的任何更改。所以这一部分要加点盐。)
baselineShift-基线是文本底部的行。有关图像,请参见this answer。更改baselineShift将导致基线上移或下移,从而影响在一行上绘制文本的高度。
bgColor-这是文本后面的背景色。
density-我假设这是屏幕密度,但在任何源代码中都找不到它。
drawableState-我在源代码中找不到什么,除了一个PFLAG_DRAWABLE_STATE_DIRTY标志,这使我认为这是用来让对象知道何时需要重新绘制。
linkColor-我只能假设这意味着它所说的内容,链接的文本颜色。但是,我在任何源代码中都找不到这个。
笔记
TextPaint source code
Paint source code
如果你有更多的信息,请留言或更新此答案。

07-26 09:33