Android 自定义 View drawText() 入门

学习来源:扔物线大神

Canvas 绘制文字

drawText(String text, float x, float y, Paint paint)

text 是文字内容,xy 是文字的坐标。这个坐标并不是文字的左上角,而是一个与文字左下角比较接近的位置。参数中的 y ,指的是文字基线的位置,基线:让所有文字互相对齐的基准线。x 点并不是字母文字左边的位置,而是比它的左边再往左一点点,是为了给各个文字之间留出空隙

drawTextRun(CharSequence text, int start, int end, int contextStart, int contextEnd, float x, float y, boolean isRtl, Paint paint) 用的少

drawTextOnPath(String text, Path path, float hOffset, float vOffset, Paint paint)

沿着一条 Path 来绘制文字, hOffsetvOffset。它们是文字相对于 Path 的水平偏移量和竖直偏移量,利用它们可以调整文字的位置。

StaticLayout (CharSequence source, TextPaint paint, int width, Layout.Alignment align, float spacingmult, float spacingadd, boolean includepad)

StaticLayout 支持换行,它既可以为文字设置宽度上限来让文字自动换行,也会在 \n 处主动换行。

width 是文字区域的宽度,文字到达这个宽度后就会自动换行;
align 是文字的对齐方向;
spacingmult 是行间距的倍数,通常情况下填 1 就好;
spacingadd 是行间距的额外增加值,通常情况下填 0 就好;
includeadd 是指是否在文字上下添加额外的空间,来避免某些过高的字符的绘制出现越界。

setTextSize(float textSize)

设置字体大小

setTypeface(Typeface typeface)

设置字体

setFakeBoldText(boolean fakeBoldText)

是否使用伪粗体。因为它并不是通过选用更高 weight 的字体让文字变粗,而是通过程序在运行时把文字给「描粗」了。

setStrikeThruText(boolean strikeThruText)

是否加删除线。

setUnderlineText(boolean underlineText)

是否加下划线

setTextSkewX(float skewX)

设置文字横向倾斜度

setTextScaleX(float scaleX)

设置文字横向放缩

setLetterSpacing(float letterSpacing)

设置字符间距。默认值是 0。

setTextAlign(Paint.Align align)

设置文字的对齐方式。一共有三个值:LEFT CETNERRIGHT。默认值为 LEFT

setTextLocale(Locale locale) / setTextLocales(LocaleList locales)

设置文字的语言,比如中文简体,中文繁体,英文等

Paint 相关

getTextBounds(String text, int start, int end, Rect bounds)

获取文字的显示范围text 是要测量的文字,startend 分别是文字的起始和结束位置,bounds 是存储文字显示范围的对象

float measureText(String text)

测量文字的宽度并返回。

小额支持我写出更好的文章~