android text 绘制

一、Canvas 绘制文字相关api

1、canvas.drawText(String text, float x, float y, Paint paint)

注释:
text : 文字的内容
x,y:文字的坐标,y为文字的基线(baseline)位置,并非文字的左上角;
x的位置为所绘制文字的左边再往左一点点,因为字符的左右两边会留出一部分空隙,用于文字之间的间隔,以及文字和边框的间隔。所以绝大多数的字符,它们的宽度都是要略微大于显示的宽度的
paint:画笔

2、canvas.drawTextRun()

此方法对中国人没用,是在API 23 新加入的方法。他和drawText()一样都是绘制文字,但加入了俩项额外的设置——上下文和文字方向——用于辅助一些文字结构比较特殊的语言的绘制。

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

功能:沿着一条Path来绘制文字
text:绘制文字内容
path:绘制路径
hOffset:文字相对于Path的水平偏移量
vOffset:文字相对于Path的竖直偏移量

二、StaticLayout

staticlayout是使用canvas来进行文字的绘制,不过并不是使用canvas的方法。Canvas.drawText()方法只能绘制单行的文字,而不能换行。其不能在view的边缘自动折行。也不能在换行符 \n处换行,其只是加了个空格和n无换行效果。如果需要绘制多行的文字,你必须自行把文字切断后分多次使用drawText来进行绘制。
StaticLayout为android.text.Layout的子类,其是纯粹用来绘制文字的,其支持换行,它既支持文字设置宽度上限来让文字自动换行,也会在\n处主动换行。

StaticLayout初始化方法:
StaticLayout(CharSequence source, TextPaint paint, int width, Layout.Alignment align, float spacingmult, float spacingadd, boolean includeadd)
width:文字区域的宽度,达到这个宽度后自动换行
align:文字的对其方式
spacingmult:行间距的倍数,通常设为1
spacingadd:行间距的额外增加值,通常情况设为0
includepad:是否在文字上下添加额外的空间,来避免某些过高的字符的绘制出现越界

String text = " This is the staticlayout sample to release the text  line feed"
StaticLayout staticLayout = new StaticLayout(text,paint,500,LayoutAlignment.ALIGN_NORMAL,1,0,true);
staticLayout.draw(canvas);

三、Paint 对文字绘制的辅助

1、设置文字的大小

paint.setTextSize();

2、设置文字的字体

设置不同的Typeface就可以显示不同的字体

//设置系统自带的字体
paint.setTypeface(Typeface.DEFAULT);
paint.setTypeface(Typeface.SERIF);
//设置自定义的某套字体
paint.setTypeface(Typeface.createFromAsset(getContext().getAssets(),"Satisy-Regular.ttf"));

3、设置使用伪粗体

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

paint.setFakeBoldText(true);

4、是否加删除线

paint.setStrikeThruText(true);

5、是否加下划线

paint.setUnderlineText(true);

6、设置文字横向错切角度即文字的倾斜度

paint.setTextSkewX(-0.5f);

7、设置文字横向缩放,即文字的胖瘦

paint.setTextScaleX(1.2f);

8、设置字符间间距,默认为0

paint.setLetterSpacing(0.2f);

9、用CSS的font-feature-settings的方式来设置文字

主要设置一些文字的次要属性,可以简单了解下

paint.setFontFeatureSettings("smcp");

10、设置文字的对齐方式

文字的对齐方式一共有三种:LEFT CENTER和RIGHT 默认值为LEFT

paint.setTextAlign(Paint.ALign.CENTER);

11、设置文字的地域

paint.setTextLocale(Locale.TAIWAN)  //简体中文
paint.setTextLocale(Locale.JAPAN)    //日语

12、是否启用字体的hinting(字体微调)

现在的 Android 设备大多数都是是用的矢量字体。矢量字体的原理是对每个字体给出一个字形的矢量描述,然后使用这一个矢量来对所有的尺寸的字体来生成对应的字形。由于不必为所有字号都设计它们的字体形状,所以在字号较大的时候,矢量字体也能够保持字体的圆润,这是矢量字体的优势。不过当文字的尺寸过小(比如高度小于 16 像素),有些文字会由于失去过多细节而变得不太好看。 hinting 技术就是为了解决这种问题的:通过向字体中加入 hinting 信息,让矢量字体在尺寸过小的时候得到针对性的修正,从而提高显示效果。

paint.setHinting(int mode)

你可能感兴趣的:(android text 绘制)