国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

android canvas drawText()文字居中效果

2019-10-22 18:18:15
字體:
來源:轉載
供稿:網友

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

先附上drawText()的方法說明

android,canvas,drawText,文字居中

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

android,canvas,drawText,文字居中

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

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

android,canvas,drawText,文字居中

而drawText()方法中x,y坐標所指的點就是上圖基線上三個點中的一個,具體是哪一個根據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()這個方法一定要在設置字體大小或者樣式等等一系列會影響字體的方法后在調用,不然獲取到的top和bottom值不準.

效果如下

android,canvas,drawText,文字居中

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

android,canvas,drawText,文字居中

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 和田县| 利津县| 周至县| 宁强县| 轮台县| 文登市| 榆社县| 夏河县| 南安市| 札达县| 乐亭县| 汶上县| 宣威市| 海丰县| 双流县| 江达县| 曲阜市| 博野县| 峨眉山市| 靖宇县| 张家口市| 黎川县| 前郭尔| 鲁甸县| 南皮县| 云梦县| 太保市| 仪征市| 织金县| 宁安市| 巴林左旗| 寿宁县| 博野县| 平塘县| 钟祥市| 芜湖县| 梓潼县| 平南县| 磐安县| 洮南市| 康平县|