android - Android 中的 Paint 和 TextPaint 有什么区别?

标签 android canvas text paint

PaintTextPaint 有什么区别?只能 TextPaint 将文本绘制到 Canvas 上吗?

我最近一直在研究如何在 Canvas 上绘制文本,这让我想到了 TextPaint。然而,在阅读the source code我惊讶地发现 TextPaint 没有太多内容。事实上,您实际上并不需要它在 Canvas 上绘制文本。因此,我添加了此问答以使其更加清楚。

最佳答案

TextPaintPaint 的子类.然而,与您从这些名称中可能猜到的相反,在 Canvas 上绘制文本的繁重工作是由 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,您可以看到这一点。 (此类绘制一行文本)。这显然是为什么在创建类似 StaticLayout 的对象时必须传入 TextPaint 而不是 Paint 对象的原因.

TextPaint 字段

关于“额外数据”是什么的文档非常稀疏,这里有一个更全面的解释。 (免责声明:通过在 TextPaint 中更改这些值,我实际上无法影响测试中文本绘制方式的任何更改。所以请看这一部分加一粒盐。)

  • baselineShift - 基线是文本底部的线。参见 this answer对于图像。更改 baselineShift 会导致基线向上或向下移动,从而影响文本在一行中的绘制高度。
  • bgColor - 这是文本后面的背景色。
  • density - 我假设这是屏幕密度,但我找不到任何源代码中使用它。
  • drawableState - 除了 PFLAG_DRAWABLE_STATE_DIRTY,我在源代码中找不到太多内容标志,这让我觉得这是用来让对象知道何时需要重新绘制的。
  • linkColor - 我只能假设这意味着它所说的,链接的文本颜色。但是,我找不到在任何源代码中使用它。

注意事项

关于android - Android 中的 Paint 和 TextPaint 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41775821/

相关文章:

android - React Native 后台下载

javascript - 如何使用点击事件检测 Canvas 上的对象

javascript - 在javascript中顺时针然后逆时针旋转

android - 如何切换画面?

android - 'flavorDimension' 将被 Android Gradle Plugin 2.0 移除,它已被 'dimension' 取代

java - 如何使用 xml 或 java 设置 gridview 单元格的背景颜色,但它不是自定义的

javascript - Flash HTML5 Canvas fl_MouseOverHandler

java - Android - 编辑我的字符串,使每个单词都以大写开头

python - 需要 Pygame 帮助

c++ - 在 C++ 中获取文本文件的第 n 行