Hencoder學(xué)習(xí)筆記1-3

HenCoder Android 開發(fā)進(jìn)階:自定義 View 1-3 文字的繪制

Canvas 繪制文字的方式

drawText()

最基本的繪制文字的方法

drawTextRun()

drawTextOnPath()

沿著一條 Path 來繪制文字。這是一個(gè)耍雜技的方法。

StaticLayout

StaticLayout(CharSequence source, TextPaint paint, int width, Layout.Alignment align, float spacingmult, float spacingadd, boolean includepad),其中參數(shù)里:

width 是文字區(qū)域的寬度,文字到達(dá)這個(gè)寬度后就會(huì)自動(dòng)換行;
align 是文字的對(duì)齊方向;
spacingmult 是行間距的倍數(shù),通常情況下填 1 就好;
spacingadd 是行間距的額外增加值,通常情況下填 0 就好;
includeadd 是指是否在文字上下添加額外的空間,來避免某些過高的字符的繪制出現(xiàn)越界

Paint 對(duì)文字繪制的輔助

設(shè)置顯示效果類

設(shè)置文字大小。
設(shè)置字體。setTypeface(Typeface typeface)
是否使用偽粗體。setFakeBoldText(boolean fakeBoldText)
是否加刪除線。setStrikeThruText(boolean strikeThruText)
是否加下劃線。setUnderlineText(boolean underlineText)
設(shè)置文字橫向錯(cuò)切角度。setTextSkewX(float skewX)
設(shè)置文字橫向放縮。setTextScaleX(float scaleX)
設(shè)置字符間距。setLetterSpacing(float letterSpacing)
用 CSS 的 font-feature-settings 的方式來設(shè)置文字。setFontFeatureSettings(String settings)
設(shè)置文字的對(duì)齊方式。setTextAlign(Paint.Align align)
設(shè)置繪制所使用的 Locale。setTextLocale(Locale locale) / setTextLocales(LocaleList locales)
設(shè)置是否啟用字體的 hinting (字體微調(diào))setHinting(int mode)
設(shè)置是否開啟文字的 elegant height 。setElegantTextHeight(boolean elegant)
是否開啟次像素級(jí)的抗鋸齒( sub-pixel anti-aliasing )。setSubpixelText(boolean subpixelText)
setLinearText(boolean linearText)

測(cè)量文字尺寸類

獲取推薦的行距。
float getFontSpacing()
獲取 Paint 的 FontMetrics。
FontMetircs getFontMetrics()
獲取文字的顯示范圍。
getTextBounds(String text, int start, int end, Rect bounds)
測(cè)量文字的寬度并返回。 float measureText(String text)
獲取字符串中每個(gè)字符的寬度,并把結(jié)果填入?yún)?shù) widths。getTextWidths(String text, float[] widths)
這個(gè)方法也是用來測(cè)量文字寬度的。
int breakText(String text, boolean measureForwards, float maxWidth, float[] measuredWidth)

光標(biāo)相關(guān)

計(jì)算出某個(gè)字符處光標(biāo)的 x 坐標(biāo)。
getRunAdvance(CharSequence text, int start, int end, int contextStart, int contextEnd, boolean isRtl, int offset)
給出一個(gè)位置的像素值,計(jì)算出文字中最接近這個(gè)位置的字符偏移量
getOffsetForAdvance(CharSequence text, int start, int end, int contextStart, int contextEnd, boolean isRtl, float advance)
檢查指定的字符串中是否是一個(gè)單獨(dú)的字形 (glyph)hasGlyph(String string)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容