自定义View-文字绘制

拈花ヽ惹草 提交于 2019-11-25 19:52:24

前言

文字绘制其实内容太细,而且可能不常用,确实我工作这么久,没用到过几次,这里就快速总结一下API,做下笔记吧。

绘制文字的方式:

// 最基本的方法drawText(), 注意很重要的一点,x,y的坐标是指文字左下角的坐标
canvas.drawText(text, x, y, paint);

// 对中国人没用,某些国家的文字形状会相互影响,单写是一个样儿, 和别的字连在一起又一个样
canvas.drawTextRun();

// 沿着一条Path来绘制文字, 拐弯处记得用圆角
canvas.drawTextOnPath(text, path, x, y, paint);

// 绘制多行文字,对文字的排列和样式没有太复杂的要求,使用StaticLayout
StaticLayout

Paint对文字绘制的辅助

// 设置文字大小
setTextSize(float size);

// 设置字体
setTypeface(Typeface typeface);

// 是否使用伪粗体
setFakeBoldText(boolean fakeBoldText);

// 是否使用删除线
setStrikeThruText(boolean strikeThruText);

// 是否加下划线
setUnderlineText(boolean underlineText);

// 设置文字横向错切角度,也就是倾斜角度
setTextSkewX(float skewX);

// 设置文字横向放缩,也就是胖瘦
setTextScaleX(float scaleX);

// 设置字符间距
setLetterSpacing(float letterSpacing);

// 通过CSS的font-feature-settings的方式来设置文字
setFontFeatureSettings("smcp");

// 设置文字的对齐方式
setTextAlign(Paint.Align align);

// 设置语言区域,比如简体中文、繁体中文
setTextLocale(Locale locale);

// 设置字体微调, 说白了就是字体太小的时候,为了能看的更细致,现在手机分辨率那么高,基本没用了
setHinting(int mode);

// 此方法对中国人没用,优化文字的高度,看起来更美观些
setElegantTextHeight(boolean elegant);

// 开启次像素级的抗锯齿
setSubpixelText(boolean subpixelText);

// 这个没搞懂
setLinearText(boolean linearText);

测量文字尺寸类

// 获取推荐的行距
getFontSpacing();

// 获取Paint的FontMetrics
getFontMetrics();

// 获取文字的显示范围
getTextBounds(text, start, end, bounds);

// 测量文字的宽度并返回
float measureText(text);

// 获取字符串中每个字符的宽度,并把结果填入widths
getTextWidths(String text, float[] widths);

// 测量文字宽度,在给出宽度上限的前提下测量文字的宽度,超出上限,就截断
int breakText(String text, boolean measureForwards, float maxWidth, float[] measuredWidth);

// 计算某个字符处光标的X坐标
getRunAdvance(text, start, end, contextStart, contextEnd, isRtl, offset);

// 给出一个位置的像素值,计算文字中最接近这个位置的字符偏移量
getOffsetForAdvance(text, start, end, contextStart, contextEnd, isRtl, advance);

// 检查置顶的字符串中是否是一个单独的字形
hasGlyph(String string);

总结

1、关于文字绘制,最常用的可能只是drawText()

2、StaticLayout可以解决文字换行的问题

3、可以设置文字的大小,风格,什么删除线,下划线,字体倾斜,字体胖瘦,字符间距

4、可以测量文字的宽度,获取文字的显示范围等

这一章的内容真的是很细很细了,而且很多不常用,并不需要背会它们,而是知道有这么个东西,大概怎么用就行,真的用到了可以回来看一看。

贴个HenCoder的链接:自定义View-drawText()

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!