Paint文字相关

2018-11-19  本文已影响0人  jadefly

文字相关:显示效果、测量文字尺寸、光标、检查字形


设置显示效果类

setTextSize(float textSize)

简介:设置文字大小

setTypeface(Typeface typeface)

简介:设置字体

字体类型及风格

setFakeBoldText(boolean fakeBoldText)

简介:是否使用伪粗体

伪粗体:通过程序在运行时把文字给「描粗」,而非选用更高 weight 的字体让文字变粗(设置在小字体上效果会非常差)

setStrikeThruText(boolean strikeThruText)

简介:是否加删除线

删除线

setUnderlineText(boolean underlineText)

简介:是否加下划线

下划线

setTextSkewX(float skewX)

简介:设置文字横向错切角度,即倾斜

倾斜

setTextScaleX(float scaleX)

简介:设置文字横向放缩,使文字变胖变瘦

横向缩放

setLetterSpacing(float letterSpacing)

简介:设置字符间距,默认值是 0

 setFontFeatureSettings(String settings)

简介:用 CSS 的 font-feature-settings 的方式来设置文字

setTextAlign(Paint.Align align)

简介:设置文字的对齐方式,三个值:LEFT(默认)、CETNER 、 RIGHT

对齐方式

setTextLocale(Locale locale) / setTextLocales(LocaleList locales)

简介:在不改变系统设置的情况下,直接修改绘制时的 Locale

Locale:地域,即系统里设置的「语言」或「语言区域」

locale

 setHinting(int mode)

简介:设置是否启用字体的 hinting (字体微调)

         (随着手机屏幕的像素密度提高,用不到了)

setElegantTextHeight(boolean elegant)

简介:还原文字高度(对于国外部分语言文字高度被压缩的情况使用)

setSubpixelText(boolean subpixelText)

简介:是否开启次像素级的抗锯齿(更好的抗锯齿效果)

        (随着手机屏幕的像素密度提高,一般抗锯齿就够用了,适用于LED屏幕上)

setLinearText(boolean linearText)

简介:设置是否打开线性文本标识    

在Android中文本的绘制需要使用一个bitmap作为单个字符的缓存,setLinearText (true)表示不需要这样的文本缓存


测量文字尺寸类

float getFontSpacing()

简介:获取推荐的行距(两行文字的 baseline 的距离),系统根据文字的字体和字号自动计算的

注:getFontSpacing结果未按FontMetrics标准值计算,会在两行文字不显得拥挤的前提下缩短行距,提供更好的显示效果

获取行距

FontMetircs getFontMetrics()

简介:获取 Paint 的 FontMetrics

FontMetrics:提供了文字排印方面的数值,Paint 根据当前字体和字号,得出的这些值的推荐值

                       baseline:作为文字显示的基准线

                       ascent / descent:限制普通字符的顶部和底部范围(android中这两个值都是相对于baseline的位移,上负下正)

                       top / bottom:限制所有字形( glyph )的顶部和底部范围(android中这两个值都是相对于baseline的位移,上负下正)

                       leading:行的额外间距(即对于上下相邻的两行,上行的 bottom 线和下行的 top 线的距离)

效果

getTextBounds(String text/char[] text, int start, int end, Rect bounds)

简介:获取文字的显示范围

参数:text:要测量的文字

           start、end:文字的起始和结束位置

           bounds:储文字显示范围的Rect对象

显示范围

float measureText(String text)

简介:测量文字的宽度

占用宽度

注:getTextBounds: 它测量的是文字的显示范围(关键词:显示)

       measureText(): 它测量的是文字绘制时所占用的宽度(关键词:占用)

getTextWidths(String text, float[] widths)

简介:获取字符串中每个字符的宽度,并把结果填入参数 widths

          (等价于对每个字符分别调用measureText)

int breakText(String text, boolean measureForwards, float maxWidth, float[] measuredWidth)

简介:在给出宽度上限的前提下测量文字的宽度,返回截取的文字个数

参数:measureForwards:文字的测量方向,true 表示由左往右测量

           maxWidth:给出的宽度上限

           measuredWidth 是用于接受数据,截取的文字宽度保存在measuredWidth[0]中

测量范围内文字宽度及个数

光标相关

getRunAdvance(CharSequence text, int start, int end, int contextStart, int contextEnd, boolean isRtl, int offset)

简介:对于一段文字,计算出某个字符处光标的 x 坐标

参数:start、end:文字的起始和结束坐标

           contextStart、contextEnd:上下文的起始和结束坐标

           isRtl:文字的方向

           offset:字数的偏移,即计算第几个字符处的光标

计算光标位置

getOffsetForAdvance(CharSequence text, int start, int end, int contextStart, int contextEnd, boolean isRtl, float advance)

简介:给出一个位置的像素值,计算出文字中最接近这个位置的字符偏移量(即第几个字符最接近这个坐标)

参数:advance:给出的位置的像素值

getOffsetForAdvance() 配合上 getRunAdvance() 一起使用,就可以实现「获取用户点击处的文字坐标」的需求


hasGlyph(String string)

简介:检查指定的字符串中是否是一个单独的字形 (glyph)

效果
上一篇下一篇

猜你喜欢

热点阅读