1. Canvas文字的绘制方式
Canvas 的文字绘制方式有三种:drawText() drawTextRun() 和 drawTextOnPayth() 。
1.1 drawText(String text, float x, float y, Paint paint)
drawText() 是 Canvas 最基本的绘制文字的方法:给出文字的内容和位置,Canvas 按要求去绘制文字,大概就像这样:

方法的参数很简单: text 是文字内容,x 和 y 是文字的坐标。而如果你像绘制其他内容一样,在绘制文字的时候把坐标填成 (0, 0),文字并不会显示在 View 的左上角,而是会几乎完全显示在 View 的上方,到了 View 外部看不到的位置:

这是为什么?为什么其它的 Canvas.drawXXX() 方法,都是以左上角作为基准点的,而 drawText() 却是文字左下方呢?
其实这种设计也是有道理的。drawText() 参数中的 y ,指的是文字的基线(baseline)的位置。
1.2 drawTextOnPath()
沿着 Path 来绘制文字。这是一个个性化的方法。就像是这样:

值得注意:记住一条原则:
drawTextOnPath()使用的Path,拐弯处全用圆角,别用尖角。
具体的方法很简单:
drawTextOnPath(String text, Path path, float hOffset, float vOffset, Paint paint)
参数里,需要解释的只有两个: hOffset 和 vOffset。它们是文字相对于 Path 的水平偏移量和竖直偏移量,利用它们可以调整文字的位置。例如你设置 hOffset 为 10, vOffset 为 15,文字就会右移 10 像素和下移 15 像素。
1.3 StaticLayout
这个也是使用 Canvas 来进行文字的绘制,不过并不是使用 Canvas 的方法。
Canvas.drawText() 只能绘制单行的文字,而不能换行。而这个StaticLayout 并不是一个 View 或者 ViewGroup ,而是 android.text.Layout 的子类,它是纯粹用来绘制文字的。 StaticLayout 支持换行,它既可以为文字设置宽度上限来让文字自动换行,也会在 n 处主动换行。

StaticLayout 的构造方法是 StaticLayout(CharSequence source, TextPaint paint, int width, Layout.Alignment align, float spacingmult, float spacingadd, boolean includepad),其中参数里:
width 是文字区域的宽度,文字到达这个宽度后就会自动换行;align 是文字的对齐方向;spacingmult 是行间距的倍数,通常情况下填 1 就好;spacingadd 是行间距的额外增加值,通常情况下填 0 就好;includeadd 是指是否在文字上下添加额外的空间,来避免某些过高的字符的绘制出现越界。
如果你需要进行多行文字的绘制,并且对文字的排列和样式没有太复杂的花式要求,那么使用 StaticLayout 就好。
好了,今天就写到这里,希望大家都能越来越好!
最后
以上就是大方高跟鞋最近收集整理的关于自定义View——绘制文字1. Canvas文字的绘制方式的全部内容,更多相关自定义View——绘制文字1.内容请搜索靠谱客的其他文章。
发表评论 取消回复