概述
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. Canvas文字的绘制方式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复