您的位置:首页 > 其它

笔记—自定义View之DrawText文字绘制

2017-09-13 10:07 621 查看

一 canvas 绘制文字的方式

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

2 drawTextRun() 它和 drawText() 一样都是绘制文字,但加入了两项额外的设置——上下文和文字方向

3 drawTextOnPath(String text, Path path, float hOffset, float vOffset, Paint paint ) 沿着一条 Path 来绘制文字 hOffset 和 vOffset 分别是 横向和纵向 方向的 偏移量

4 StaticLayout 绘制多行文字

二 paint对文字绘制的辅助

1 设置文字显示效果

1 Paint.setTextSize(float textSize) 设置文字大小

2 Paint.setTypeface(Typeface typeface) 设置文字字体

读取资源文件字体方法
paint.typeface = Typeface.createFromAsset(context.assets, "Satisfy-Regular.ttf");
canvas.drawText(text, 100f, 600f, paint)


3 Paint.setFakeBoldText(boolean user) 是否使用伪粗体

4 Paint.setStrikeThroughText(boolean strikeThruText) 是否添加删除线

5 Paint.setUnderlineText(boolean underlineText) 是否添加下划线

6 Paint.setTextSkewX(float skewX) 设置文字横向错切角度。其实就是文字倾斜度的啦。

7 Paint.setTextScaleX(float scaleX) 设置文字横向缩放 也就是文字变胖变瘦

8 Paint.setLetterSpacing(float letterSpacing) 设置字符间距。默认值是 0。

9 Paint.setFontFeatureSettings(String settings) 用 CSS 的 font-feature-settings 的方式来设置文字

paint.setFontFeatureSettings("smcp"); // 设置 "small caps"
canvas.drawText("Hello HenCoder", 100, 150, paint);


10 Paint.setTextAlign(Paint.Align align) 设置文字对齐方式 一共有三个值:LEFT CENTER 和 RIGHT。默认值为 LEFT

11 Paint.setTextLocale(Locale locale) 设置文字绘制的地区 也就是大陆和台湾 同一个字 有不同写法

12 Paint.setHinting(int mode) 设置是否启用字体的 hinting (字体微调)

1 测量文字尺寸类

1 Paint.getFontSpacing() 获取推荐的行距 即推荐的两行文字的 baseline 的距离

2 Paint.getFontMetrics() 获取FontMetrics 一个相对专业的工具类 提供几个文字排印方面的数值

top/bottom  它们的作用是限制所有字形( glyph )的顶部和底部范围
ascent/descent  它们的作用是限制普通字符的顶部和底部范围
leading   指的是行的额外间距,即对于上下相邻的两行,上行的 bottom 线和下行的 top 线的距离
baseline   它的作用是作为文字显示的基准线


1 Paint.getFontSpacing() 获取推荐的行距 即推荐的两行文字的 baseline 的距离

3 Paint.getTextBounds(String text,int start,int end,Rect bounds) 获取文字的实际 显示范围 参数里 text 是要测量的文字,start 和 end 分别是文字的起始和结束位置,bounds 是存储文字显示范围的对象,方法在测算完成之后会把结果写进 bounds

4 Paint.measureText(String text)测量文字的实际占用宽度并返回

val paint= Paint()
paint.textSize=48f
canvas.drawText("Hello HenCoder",100f,100f,paint)
val width=paint.measureText("Hello HenCoder")
canvas.drawLine(100f, 100f, 100f + width, 100f, paint)


5 Paint.getTextWidths(String text,float[] widths) 获取每个字符的宽度 放入 数组 widths中

6 Paint.breakText(String text, boolean measureForwards, float maxWidth, float[] measuredWidth) 这个方法也是用来测量文字宽度的。但和 measureText() 的区别是, breakText() 是在给出宽度上限的前提下测量文字的宽度。如果文字的宽度超出了上限,那么在临近超限的位置截断文字。

7 光标相关

1 Paint.getRunAdvance(CharSequence text, int start, int end, int contextStart, int contextEnd, boolean isRtl, int offset) 计算某个字符出 光标的坐标的x值
2 Paint.getOffsetForAdvance(CharSequence text, int start, int end, int contextStart, int contextEnd, boolean isRtl, float advance)
给出一个位置的像素值,计算出文字中最接近这个位置的字符偏移量(即第几个字符最接近这个坐标
getOffsetForAdvance() 配合上 getRunAdvance() 一起使用,就可以实现「获取用户点击处的文字坐标」的需求


8 Paint.hasGl
4000
yph(String string)检查指定的字符串中是否是一个单独的字形 (glyph)。最简单的情况是,string 只有一个字母(比如a)。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: