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

android canvas drawText()文字居中效果

 更新時間:2021年09月26日 14:59:16   作者:zhuliyuan丶  
這篇文章主要為大家詳細介紹了android canvas drawText()文字居中效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文跟大家分享下我關于drawText()文字居中的方法。

先附上drawText()的方法說明

說實話當時看了這個,我也沒明白這個x,y坐標到底表達的啥意思,還一直以為是繪制文字中心的坐標,后來發(fā)現(xiàn)這個理解是錯誤的
要想理解這個首先看張圖

像圖上這樣安卓的文字繪制是相對于基線繪制的,也就是圖中的紅線,而top+bottom的長度就等于字體高度.即等于|top|+|bottom|絕對值

實際繪制的時候取決于基線上一個點來繪制文字,而這個點有三種分別對應為left,center,right如下圖

而drawText()方法中x,y坐標所指的點就是上圖基線上三個點中的一個,具體是哪一個根據(jù)paint的setTextAlign()方法設置,默認為left
示例代碼如下

Rect rect = new Rect(100,100,500,500);//畫一個矩形 
    Paint rectPaint = new Paint(); 
    rectPaint.setColor(Color.BLUE); 
    rectPaint.setStyle(Paint.Style.FILL); 
    canvas.drawRect(rect, rectPaint); 
 
    Paint textPaint = new Paint(); 
    textPaint.setColor(Color.WHITE); 
    textPaint.setTextSize(50); 
    textPaint.setStyle(Paint.Style.FILL); 
    //該方法即為設置基線上那個點究竟是left,center,還是right 這里我設置為center 
    textPaint.setTextAlign(Paint.Align.CENTER); 
 
    Paint.FontMetrics fontMetrics = textPaint.getFontMetrics(); 
    float top = fontMetrics.top;//為基線到字體上邊框的距離,即上圖中的top 
    float bottom = fontMetrics.bottom;//為基線到字體下邊框的距離,即上圖中的bottom 
 
    int baseLineY = (int) (rect.centerY() - top/2 - bottom/2);//基線中間點的y軸計算公式 
 
    canvas.drawText("你好世界",rect.centerX(),baseLineY,textPaint); 

這里有點要注意textPaint.getFontMetrics()這個方法一定要在設置字體大小或者樣式等等一系列會影響字體的方法后在調(diào)用,不然獲取到的top和bottom值不準.

效果如下

正好是在中間的,即證明等式是沒有問題的,再來分析這個等式是如何計算的

之所以drawText()方法中x,y指的是基線中間的那個點,是因為setTextAlign(Paint.Align.Center)
那么要想在正中間顯示文字,x只要為矩形的中點x坐標即可 x = rect.centerX()
要計算的就是基線中間圖上紅色點的y坐標了,看圖可以發(fā)現(xiàn)紅色點的y為矩形中點黑色點的y坐標+圖中黑色點和紅色點之間的距離
矩形y坐標為 rect.centerY()
黑色點和紅色點之間的距離為相對于基線的(top+bottom)/2 - bottom
而 top是相對于基線的所以為負數(shù),所以公式為 (-top+bottom)/2 - bottom簡化下為-top/2 - bottom/2
所以最后計算為rect.centerY - top/2 - bottom/2.

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • android實現(xiàn)圖片閃爍動畫效果的兩種實現(xiàn)方式(實用性高)

    android實現(xiàn)圖片閃爍動畫效果的兩種實現(xiàn)方式(實用性高)

    本文通過兩種方法給大家講解了android實現(xiàn)圖片閃爍動畫效果,實用性非常高,對這兩種方法感興趣的朋友一起通過本文學習吧
    2016-09-09
  • RecycleView實現(xiàn)各種尺寸圖片展示

    RecycleView實現(xiàn)各種尺寸圖片展示

    這篇文章主要為大家詳細介紹了RecycleView實現(xiàn)各種尺寸圖片展示,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • Android中的xml解析介紹

    Android中的xml解析介紹

    大家好,本篇文章主要講的是Android中的xml解析介紹,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • Android SwipeRefreshLayout超詳細講解

    Android SwipeRefreshLayout超詳細講解

    在android開發(fā)中,使用最多的數(shù)據(jù)刷新方式就是下拉刷新了,而完成此功能我們使用最多的就是第三方的開源庫PullToRefresh?,F(xiàn)如今,google也忍不住推出了自己的下拉組件SwipeRefreshLayout,下面我們通過api文檔和源碼來分析學習如何使用SwipeRefreshLayout
    2022-11-11
  • Android為Tiny4412設備驅(qū)動在proc目錄下添加一個可讀版本信息的文件

    Android為Tiny4412設備驅(qū)動在proc目錄下添加一個可讀版本信息的文件

    今天小編就為大家分享一篇關于Android為Tiny4412設備驅(qū)動在proc目錄下添加一個可讀版本信息的文件,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • Android使用Dialog風格彈出框的Activity

    Android使用Dialog風格彈出框的Activity

    這篇文章主要為大家詳細介紹了Android使用Dialog風格彈出框的Activity,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • Android Studio自動排版的兩種實現(xiàn)方式

    Android Studio自動排版的兩種實現(xiàn)方式

    這篇文章主要介紹了Android Studio自動排版的兩種實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • Android實現(xiàn)九宮格抽獎

    Android實現(xiàn)九宮格抽獎

    這篇文章主要為大家詳細介紹了Android實現(xiàn)九宮格抽獎,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • android開發(fā)權限詢問的示例代碼

    android開發(fā)權限詢問的示例代碼

    這篇文章主要介紹了android開發(fā)權限詢問的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • Android JNI c/c++調(diào)用java的實例

    Android JNI c/c++調(diào)用java的實例

    這篇文章主要介紹了Android JNI c/c++調(diào)用java的實例的相關資料,需要的朋友可以參考下
    2017-07-07

最新評論

太康县| 古田县| 云和县| 韶山市| 紫云| 浦北县| 寻乌县| 双辽市| 襄城县| 宝应县| 通道| 蓬莱市| 东乌珠穆沁旗| 隆昌县| 库尔勒市| 泽库县| 阜平县| 星子县| 阜城县| 运城市| 嘉黎县| 和静县| 方城县| 巴东县| 海盐县| 乾安县| 黔西县| 英山县| 河曲县| 德江县| 阜康市| 齐齐哈尔市| 苗栗县| 女性| 南漳县| 武平县| 白山市| 沅陵县| 中西区| 固阳县| 城步|