drawText文字绘制知识

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

x,y是基于文字基本线的,而不是android坐标系的左上角。

使用staticLayout进行文字换行,它既可以为文字设置宽度上限来让文字自动换行,也会在 \n 处主动换行

例子:

String text1 = "Lorem Ipsum is simply dummy text of the printing and typesetting industry.";  
StaticLayout staticLayout1 = new StaticLayout(text1, paint, 600,  
        Layout.Alignment.ALIGN_NORMAL, 1, 0, true);
String text2 = "a\nbc\ndefghi\njklm\nnopqrst\nuvwx\nyz";  
StaticLayout staticLayout2 = new StaticLayout(text2, paint, 600,  
        Layout.Alignment.ALIGN_NORMAL, 1, 0, true);

...

canvas.save();  
canvas.translate(50, 100);  
staticLayout1.draw(canvas);  
canvas.translate(0, 200);  
staticLayout2.draw(canvas);  
canvas.restore(); 

效果:

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 就好。

 

Paint对文字绘制的辅助

 

setTypeface(Typeface typeface)  设置字体样式

setFakeBoldText(boolean fakeBoldText) 设置伪粗体

setStrikeThruText(boolean strikeThruText) 是否加删除线

setUnderlineText(boolean underlineText) 是否加下划线

setTextSkewX(float skewX) 字体倾斜对应的角度

setLetterSpacing(float letterSpacing) 设置字符间距,默认是0

 setTextAlign(Paint.Align align) 设置文字对齐方式,左对齐,右对齐,中间对齐等

setTextLocale(Locale locale) 设置字体的语言区域,繁体中文,简体中文等

 

posted @ 2018-11-23 10:20  Leo的银弹  阅读(731)  评论(0编辑  收藏  举报