最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android Canvas的drawText()與文字居中方案詳解

 更新時(shí)間:2019年12月19日 15:30:48   作者:biloba  
這篇文章主要給大家介紹了關(guān)于Android Canvas的drawText()與文字居中方案的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對各位Android開發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

自定義View是繪制文本有三類方法

// 第一類
public void drawText (String text, float x, float y, Paint paint)
public void drawText (String text, int start, int end, float x, float y, Paint paint)
public void drawText (CharSequence text, int start, int end, float x, float y, Paint paint)
public void drawText (char[] text, int index, int count, float x, float y, Paint paint)

// 第二類
public void drawPosText (String text, float[] pos, Paint paint)
public void drawPosText (char[] text, int index, int count, float[] pos, Paint paint)

// 第三類
public void drawTextOnPath (String text, Path path, float hOffset, float vOffset, Paint paint)
public void drawTextOnPath (char[] text, int index, int count, Path path, float hOffset, float vOffset, Paint paint)

其中drawText()最常用,drawPosText ()是根據(jù)一個(gè)個(gè)坐標(biāo)點(diǎn)指定文字位置,drawTextOnPath ()是根據(jù)路徑繪制。但drawText()的x,y參數(shù)是干嘛的呢?

先來測試下

Paint paint=new Paint();
 paint.setStyle(Paint.Style.FILL);
 paint.setStrokeWidth(12);
 paint.setTextSize(100);

 String text="測試:my text";
 canvas.drawText(text, 200, 400, paint);

 //畫兩條線標(biāo)記位置
 paint.setStrokeWidth(4);
 paint.setColor(Color.RED);
 canvas.drawLine(0, 400, 2000, 400, paint);
 paint.setColor(Color.BLUE);
 canvas.drawLine(200, 0, 200, 2000, paint);

左對齊-left

可以看到,x,y并不是指定文字的中點(diǎn)位置,并且x,y與文字對齊方式有關(guān)(通過setTextAlign()指定,默認(rèn)為left)

居中對齊-center

右對齊-right

(為了使文字完整,上面調(diào)整了下x,y的值)

從上面三種情況得出結(jié)論,x所對應(yīng)的豎線:

  • 左對齊 — 文字的左邊界
  • 居中對齊 — 文字的中心位置
  • 右對齊 — 文字的左邊界

y對應(yīng)的橫線并不是文字的下邊界,而是基準(zhǔn)線Baseline

看下面這張圖


紅色的Baseline是基準(zhǔn)線,紫色的Top是文字的最頂部,也就是在drawText()中指定的x所對應(yīng),橙色的Bottom是文字的底部。

拿這些值如何獲取呢?

Paint.FontMetrics fontMetrics=paint.getFontMetrics();
 fontMetrics.top
 fontMetrics.ascent
 fontMetrics.descent
 fontMetrics.bottom

記得要在設(shè)置完P(guān)aint的文字大小,寬度之類屬性后再獲取FontMetrics,
baseline對應(yīng)對應(yīng)值為0,在它下面的descent和bottom值為正,top和ascent為負(fù)。那文字的高度為bottom - top


所以,實(shí)際繪制的時(shí)候取決于基線上一個(gè)點(diǎn)來繪制文字,而這個(gè)點(diǎn)有三種分別對應(yīng)為left,center,right


好啦,把drawText()中x,y參數(shù)講清楚后實(shí)現(xiàn)文字居中就很容易了

直接上代碼

//矩形背景
 Paint bgRect=new Paint();
 bgRect.setStyle(Paint.Style.FILL);
 bgRect.setColor(Color.YELLOW);
 RectF rectF=new RectF(200, 200, 800, 600);
 canvas.drawRect(rectF, bgRect);

 Paint textPaint=new Paint();
 textPaint.setStyle(Paint.Style.FILL);
 textPaint.setStrokeWidth(8);
 textPaint.setTextSize(50);
 textPaint.setTextAlign(Paint.Align.CENTER);

 String text="測試:my text";
 //計(jì)算baseline
 Paint.FontMetrics fontMetrics=textPaint.getFontMetrics();
 float distance=(fontMetrics.bottom - fontMetrics.top)/2 - fontMetrics.bottom;
 float baseline=rectF.centerY()+distance;
 canvas.drawText(text, rectF.centerX(), baseline, textPaint);

效果


將對齊方式設(shè)置為center,那要讓文字居中顯示,x值就為矩形中心x值,y值也就是baseline的計(jì)算看下圖


y = 矩形中心y值 + 矩形中心與基線的距離

距離 = 文字高度的一半 - 基線到文字底部的距離(也就是bottom)
 = (fontMetrics.bottom - fontMetrics.top)/2 - fontMetrics.bottom

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對腳本之家的支持。

相關(guān)文章

  • Android仿微信長按菜單效果

    Android仿微信長按菜單效果

    這篇文章主要為大家詳細(xì)介紹了Android仿微信長按菜單效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • Android編程之手機(jī)壁紙WallPaper設(shè)置方法示例

    Android編程之手機(jī)壁紙WallPaper設(shè)置方法示例

    這篇文章主要介紹了Android編程之手機(jī)壁紙WallPaper設(shè)置方法,結(jié)合實(shí)例形式分析了Android手機(jī)壁紙WallPaper的相關(guān)設(shè)置與使用技巧,需要的朋友可以參考下
    2017-08-08
  • Android應(yīng)用獲取設(shè)備序列號的方法

    Android應(yīng)用獲取設(shè)備序列號的方法

    本篇文章主要介紹了Android應(yīng)用獲取設(shè)備序列號的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-06-06
  • Android編程之動(dòng)態(tài)壁紙實(shí)例分析

    Android編程之動(dòng)態(tài)壁紙實(shí)例分析

    這篇文章主要介紹了Android編程之動(dòng)態(tài)壁紙實(shí)現(xiàn)方法,以實(shí)例形式分析了Android動(dòng)態(tài)壁紙的原理與實(shí)現(xiàn)步驟,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-12-12
  • 利用Android畫圓弧canvas.drawArc()實(shí)例詳解

    利用Android畫圓弧canvas.drawArc()實(shí)例詳解

    這篇文章主要給大家介紹了關(guān)于利用Android畫圓弧canvas.drawArc()的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的理解和學(xué)習(xí)具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • Kotlin線程的橋接與切換使用介紹

    Kotlin線程的橋接與切換使用介紹

    這篇文章主要介紹了Android開發(fā)中Kotlin線程的橋接與切換,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Android Studio 3.0中mipmap-anydpi-v26是什么東東

    Android Studio 3.0中mipmap-anydpi-v26是什么東東

    在Android Studio 3.0中一旦我們創(chuàng)建了一個(gè)項(xiàng)目,一個(gè)名為mipmap-anydpi-v26自動(dòng)創(chuàng)建的文件夾在res文件夾下。它究竟能干什么?為什么我們需要這個(gè)?我們在開發(fā)時(shí)該如何利用它,下面通過本文給大家介紹下
    2017-12-12
  • Android自動(dòng)提示控件AutoCompleteTextView

    Android自動(dòng)提示控件AutoCompleteTextView

    這篇文章主要介紹了Android自動(dòng)提示控件AutoCompleteTextView的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • Android NestedScrolling嵌套滾動(dòng)的示例代碼

    Android NestedScrolling嵌套滾動(dòng)的示例代碼

    這篇文章主要介紹了Android NestedScrolling嵌套滾動(dòng)的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-05-05
  • Android編程實(shí)現(xiàn)圓角邊框布局效果的方法

    Android編程實(shí)現(xiàn)圓角邊框布局效果的方法

    這篇文章主要介紹了Android編程實(shí)現(xiàn)圓角邊框布局效果的方法,結(jié)合實(shí)例形式分析了Android TableLayout布局的相關(guān)屬性操作與圓角邊框?qū)崿F(xiàn)技巧,需要的朋友可以參考下
    2017-06-06

最新評論

额敏县| 威宁| 呼玛县| 井冈山市| 界首市| 张掖市| 错那县| 崇阳县| 长岛县| 克拉玛依市| 马关县| 内黄县| 榕江县| 新干县| 崇左市| 班玛县| 高尔夫| 苏尼特左旗| 女性| 集安市| 凌海市| 昌都县| 普兰店市| 阳新县| 贵定县| 广安市| 勐海县| 凤凰县| 竹溪县| 常州市| 扎囊县| 绥宁县| 苍山县| 深泽县| 荃湾区| 东兰县| 柞水县| 六枝特区| 阿巴嘎旗| 贡嘎县| 枞阳县|