亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > OS > 安卓 > 正文

Android文字基線Baseline算法的使用講解

2024-09-11 17:15:19
字體:
來源:轉載
供稿:網友

引言

Baseline是文字繪制時所參照的基準線,只有先確定了Baseline的位置,我們才能準確的將文字繪制在我們想要的位置上。Baseline的概念在我們使用TextView等系統控件直接設置文字內容時是用不到的,但是如果我們想要在Canvas畫布上面繪制文字時,Baseline的概念就必不可少了。

我們先了解一下Android中Canvas畫布繪制文字的方法,如下圖:

參數示意:

text,文字內容 x,文字從畫布上開始繪制的x坐標(Canvas是一個原點在左上角的平面坐標系) y,Baseline所在的y坐標,不少人已開始以為y是繪制文字區域的底部坐標,其實是不正確的,這是兩個概念 paint,畫筆,設置的文字的大小顏色等屬性 了解了文字繪制的方法,我們現在就了解一下這個參數y(Baseline)的計算方法。

Baseline的概念

我們先看一行文字各區域的分布示意圖


從上圖來看,Baseline不難理解,它就是E和h的下邊界線。我們還可以得出一個結論,文字的高度=Descent+Ascent。

然而,上面這個公式并不完全準確,我們再看一個圖:


我們看到,如果文字的上方有一些特殊的符號,比如上圖中的~或者是我們漢語拼音中的聲調時,文字區域又會多出一部分Leading。

因此,完整的公式應該是

文字的高度=Descent+Ascent+Leading。

那么,為什么第一幅圖中沒有說明Leading的存在呢,原因是我們通常在繪制一行英文或者中文時,Leading的高度為0。我們看一個證據圖,下圖是在繪制英文文字時調試取得的數據。

其中leading=0,所以我們在文字繪制時不需要考慮Leading,圖中的數值都是距離Baseline的距離,在Baseline上方為負值,下方為正值。

Baseline位置(y軸坐標)的計算

為了方便我們對計算過程進行理解,我畫了一幅幫助圖,如下:

假設我們是在畫布Canvas的頂部繪制一行文字,規定一行文字的高度是y,文字區域的高度是Height(TOP和BOTTOM之間,TOP到0和BOTTOM到y的距離相等,這樣文字才看起來是居中)。因此,0到y和TOP到BOTTOM的中線是重合的,y軸坐標都是y/2。

我們要繪制一行文字時,設計必然會告訴我們0到y的距離,所以中線的位置也是固定的y/2,那么我們設置了Paint的文字大小后,Ascent和Descent又能直接得到,就可以算出中線到基線的距離,公式如下:

基線到中線的距離=(Descent+Ascent)/2-Descent

注意,實際獲取到的Ascent是負數。公式推導過程如下:

中線到BOTTOM的距離是(Descent+Ascent)/2,這個距離又等于Descent+中線到基線的距離,即(Descent+Ascent)/2=基線到中線的距離+Descent。

有了基線到中線的距離,我們只要知道任何一行文字中線的位置,就可以馬上得到基線的位置,從而得到Canvas的drawText方法中參數y的值。

Android獲取中線到基線距離的代碼,Paint需要設置文字大小textsize。

  /**   * 計算繪制文字時的基線到中軸線的距離   *    * @param p   * @param centerY   * @return 基線和centerY的距離   */  public static float getBaseline(Paint p) {    FontMetrics fontMetrics = p.getFontMetrics();    return (fontMetrics.descent - fontMetrics.ascent) / 2 -fontMetrics.descent;  }
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲电影成人av99爱色| 亚洲xxxxx性| 亚洲日本中文字幕免费在线不卡| 超碰97人人做人人爱少妇| 91久久在线播放| 亚洲国产欧美一区二区丝袜黑人| 亚洲黄页视频免费观看| 欧美性在线观看| 日韩乱码在线视频| 久久九九精品99国产精品| 日韩经典第一页| 国产精品草莓在线免费观看| 久久久久久久久久久人体| 欧美高清无遮挡| 国产小视频91| 另类美女黄大片| 91系列在线播放| 欧美成人免费在线观看| 自拍偷拍亚洲精品| 国产精品一久久香蕉国产线看观看| 亚洲欧美日韩国产中文专区| 国产91在线高潮白浆在线观看| 91社影院在线观看| 4438全国成人免费| 欧美麻豆久久久久久中文| 国产欧美一区二区三区四区| 亚洲欧美日韩一区二区三区在线| 精品久久久久久久久久久久| 国产精品美女呻吟| 日韩一级黄色av| 国内成人精品一区| 欧美中文在线观看国产| 久久久国产精品视频| 岛国视频午夜一区免费在线观看| 欧美极品少妇xxxxⅹ免费视频| 国产不卡在线观看| 国产不卡在线观看| 国产精品久久视频| 另类专区欧美制服同性| 中文字幕av一区| 91成人性视频| www.日韩.com| 亚洲欧美在线一区二区| 国产精品www| 在线观看国产欧美| 国产精品久久久久久久电影| 亚洲天堂久久av| 亚洲美女av网站| 成人精品久久久| 欧美伊久线香蕉线新在线| 国产成人小视频在线观看| 日韩欧美在线免费观看| 精品呦交小u女在线| 亚洲男人天堂手机在线| 亚洲日韩欧美视频| 97香蕉超级碰碰久久免费的优势| 久久免费少妇高潮久久精品99| 亚洲精品福利在线| 国产精品日本精品| 欧美一级黑人aaaaaaa做受| 亚洲国产精品99久久| 国产精品久久久久久亚洲影视| 亚洲的天堂在线中文字幕| 欧美亚洲日本网站| 成人黄色av免费在线观看| 国产在线视频不卡| 久久激情视频免费观看| 欧美巨猛xxxx猛交黑人97人| 亚洲美女av黄| 亚洲美女动态图120秒| 国产91色在线|免| 成人午夜一级二级三级| 亚洲精品国产福利| 2025国产精品视频| 亚洲www永久成人夜色| 国产91精品久| 国产91色在线|免| 久久成人精品一区二区三区| 最新91在线视频| 日韩免费在线视频| 97激碰免费视频| 日韩视频亚洲视频| 色综合久久88| 一区二区三区四区在线观看视频| 欧美在线视频在线播放完整版免费观看| 亚洲性线免费观看视频成熟| 亚洲精品视频二区| 精品久久香蕉国产线看观看亚洲| 色七七影院综合| 久久久久久国产精品三级玉女聊斋| 欧美精品在线观看91| 亚洲成人黄色在线| 日韩视频永久免费观看| 欧美日韩另类在线| 精品无码久久久久久国产| 国产一区深夜福利| 日本一本a高清免费不卡| 欧美视频第一页| 久久国产精品首页| 国产精品亚洲网站| 26uuu另类亚洲欧美日本老年| 国产一区视频在线播放| 国产精品久久97| 久久久人成影片一区二区三区观看| 亚洲伊人久久大香线蕉av| 欧美又大粗又爽又黄大片视频| 91理论片午午论夜理片久久| 国内精品一区二区三区| 亚洲第一黄色网| 欧美成人精品激情在线观看| 九九热最新视频//这里只有精品| 在线精品国产欧美| 国产极品精品在线观看| 亚洲精品一区在线观看香蕉| 在线a欧美视频| 久久久999精品免费| 国产91在线播放精品91| 欧美高清视频免费观看| 成人国产精品免费视频| 91经典在线视频| 欧美孕妇孕交黑巨大网站| 欧美美女18p| 欧美激情2020午夜免费观看| 欧美成人午夜免费视在线看片| 日韩精品在线观看一区二区| 亚洲视频免费一区| 国产精品v片在线观看不卡| 欧美黄色成人网| 欧美特黄级在线| 欧美在线观看一区二区三区| 亚洲在线免费观看| 91精品视频大全| 欧美猛交免费看| 亚洲国产精品久久| 欧美激情中文字幕乱码免费| 一色桃子一区二区| 欧美日韩亚洲一区二区三区| 欧美国产日本高清在线| 伊人男人综合视频网| 国产精品狼人色视频一区| 欧美精品久久久久久久久久| 国产精品极品美女粉嫩高清在线| 成人网址在线观看| 国产日韩换脸av一区在线观看| 国产日韩欧美电影在线观看| 国产91精品青草社区| 国产精品中文在线| 97色在线观看免费视频| 欧美一区在线直播| 亚洲国产精品久久精品怡红院| 91久久夜色精品国产网站| 亚州av一区二区| 国产精品99久久久久久www| 97视频在线观看免费| 精品久久香蕉国产线看观看亚洲| 国产精品夜间视频香蕉| 亚洲欧美日韩网| 97视频在线观看播放| 精品中文字幕在线2019| 国产精品免费久久久久久| 欧美乱人伦中文字幕在线| 亚州国产精品久久久| 国产精品露脸自拍| 91精品在线观看视频|