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)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,056评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,842评论 2 378
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,938评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,296评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,292评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,413评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,824评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,493评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,686评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,502评论 2 318
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,553评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,281评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,820评论 3 305
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,873评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,109评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,699评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,257评论 2 341

推荐阅读更多精彩内容

  • 前面学习了Android自定义View(一) -- 初识Android自定义View(二) -- Paint详解 ...
    T9的第三个三角阅读 14,288评论 0 25
  • 一、概述 1. 四线格与基线 小时候,我们在刚开始学习写字母时,用的本子是四线格的,我们必须把字母按照规则写在四线...
    addapp阅读 7,590评论 2 17
  • 【Android 自定义View之绘图】 基础图形的绘制 一、Paint与Canvas 绘图需要两个工具,笔和纸。...
    Rtia阅读 11,641评论 5 34
  • 今天,朋友圈里的朋友推荐了这个APP,并这样写道:真心不错的app,有思想,无广告,告别朋友圈的不二选择! 于是马...
    晓青阅读 229评论 0 2
  • 最近生活中的一些感悟与你分享: 1. 有时,我们可能会为了回避一些东西而选择其他的路径,可是后来,却发现有些东...
    谢胜兰Athena阅读 277评论 0 0