Android Canvas 添加文本 Text

发布于 2024-10-25 08:31:10 字数 2052 浏览 5 评论 0

canvas.drawText(text, x, y, paint);

其中坐标 (x, y) 是默认是文字的坐下角

  • canvas.drawTextRun() 带上下文
  • canvas.drawTextOnPath() 沿着路径绘制,满足一些特殊需求

以上绘制不能实现自动换行和到 View 边界自动换行,需要自动换行的可以使用 StaticLayout 辅助 如果你需要进行多行文字的绘制,并且对文字的排列和样式没有太复杂的花式要求,那么使用 StaticLayout 就好。想要绘制比较花哨或者类似富文本的样式,就要使用 canvas.drawText 边计算边绘制了。

字体样式相关的都在 Pain 中

  • 大小: setTextSize
  • 字体: setTypeface
  • 是否使用伪粗体: setFakeBoldText
  • 删除线: setStrikeThruText
  • 下划线: setUnderlineText
  • 倾斜: setTextSkewX
  • 缩放: setTextScaleX/Y
  • 字符间距: setLetterSpacing
  • 对齐: setTextAlign,即 (x, y) 坐标中的 x 是文字的左边、中间,还是右边
  • 语言地区: setTextLocale (不同地区的同一个字样子可能不一样。)
textSize != textHeight

文字测量

Paint

文字的左右和上下边距

  • 行距:paint.getFontSpacing()
  • ascent / descent: Paint.ascent() 和 Paint.descent()
  • 显示范围: getTextBounds(String text, int start, int end, Rect bounds),紧贴文字可见的边框。
  • 文字宽度 measureText, 获取的是字符串的有效宽度,字符显示的间距,其实有字符所占的宽度往往比显示的范围大一些。
  • 每个字符的宽度: getTextWidths(String text, float[] widths) 并把结果填入参数 widths.
  • breakText(String text, boolean measureForwards, float maxWidth, float[] measuredWidth) 给定宽度显示,测量文字的宽度,并且范围给定宽度能够显示字符的数量。measureForwards 表示文字的测量方向,true 表示由左往右测量;maxWidth 是给出的宽度上限;measuredWidth 是用于接受数据,而不是用于提供数据的:方法测量完成后会把截取的文字宽度(如果宽度没有超限,则为文字总宽度)赋值给 measuredWidth[0]。
  • 光标位置: getRunAdvance(CharSequence text, int start, int end, int contextStart, int contextEnd, boolean isRtl, int offset)
FontMetircs.getFontMetrics()

文字的几条线

  • baseline: 不用计算,文字的坐标的位置。 其余几个尺寸都是相对于 baseline 的距离,在 baseline 上方的为负值,下方的为正值。
  • scent / descent: 文字的建议限制范围,一般是在这个边界内。他们是相对 baseline 的相对位移
  • top / bottom: 字体范围
  • leading: 下一行的 top 和 该行的 bottom 之间的距离。

bottom - top + leading 的结果是要大于 getFontSpacing() 的返回值的。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

沙沙粒小

暂无简介

0 文章
0 评论
23 人气
更多

推荐作者

ambitionlv

文章 0 评论 0

澉约

文章 0 评论 0

hukaixi

文章 0 评论 0

自演自醉

文章 0 评论 0

詹宝成

文章 0 评论 0

alipaysp_PLnULTzf66

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文