【Android 应用开发】Canvas 精准绘制文字 ( 测量文本真实边界 | 将文本中心点与给定中心点对齐 )
文章目錄
- 一、測(cè)量文本真實(shí)邊界
- 二、將文本中心點(diǎn)與給定中心點(diǎn)對(duì)齊
一、測(cè)量文本真實(shí)邊界
Paint.getTextBounds() 函數(shù)原型如下 :
public class Paint {/*** 檢索文本邊界框并存儲(chǔ)到邊界。** 在邊界內(nèi)返回(由調(diào)用方分配)包含所有字符的最小矩形,其隱含原點(diǎn)為(0,0)。** @param text 測(cè)量的字符串并返回其邊界* @param start 要測(cè)量字符串的起始位置* @param end 要測(cè)量字符串的結(jié)束位置 + 1* @param bounds 返回所有文本的聯(lián)合邊界。必須由調(diào)用方分配*/public void getTextBounds(String text, int start, int end, Rect bounds) {if ((start | end | (end - start) | (text.length() - end)) < 0) {throw new IndexOutOfBoundsException();}if (bounds == null) {throw new NullPointerException("need bounds Rect");}nGetStringBounds(mNativePaint, text, start, end, mBidiFlags, bounds);} }獲取邊界代碼示例 :
Rect rect = new Rect(); paint.getTextBounds(text, 0, text.length(), rect);獲取的邊界值 , 并不是繪制該文本的坐標(biāo) , 是使用 Paint 在 Canvas 中繪制的文本的真實(shí)占用區(qū)域 , 如下圖紅色矩形框所在的區(qū)域 , 與文本的相對(duì)坐標(biāo) , 下圖的紅色矩形框的 右下角是 ( 0 , 0 ) 坐標(biāo)位置 ;
Rect 中獲取的坐標(biāo)值示例 : left = 4 , top = -31 , right = 28 , bottom = 0 ;
下圖中紅色矩形框是 繪圖占用范圍 , 藍(lán)色矩形框是 文本占用的范圍 , 繪圖占用范圍要大于文本占用范圍 ;
left 和 right 值 , 是相對(duì)于 左側(cè)的真實(shí)值 ;
top 和 bottom 值 , 是相對(duì)于 文本 基線值的相對(duì)值 , top = -31 , 說明文本的頂部在基線上方 31 像素位置 , bottom = 0 , 說明文本的底部就是基線 ;
上述 Rect 的坐標(biāo)軸是這么算的 , x 軸是文本的基線軸 , y 軸是繪圖區(qū)域的左側(cè)邊界 ;
一定要確定兩個(gè)概念 , 下圖 紅色矩形框 的區(qū)域 是 繪圖區(qū)域 , 下圖 藍(lán)色矩形框的區(qū)域 是文本區(qū)域 ;
繪圖區(qū)域 不等于 文本區(qū)域 , 文本一定在繪圖區(qū)域中 , 但是具體在哪 , 不確定 , 可能在中心 , 可能在下方 , 可能在右上角 , 這是根據(jù)文本的特性確定的 , 如有的文本時(shí) abcd 類型的 , 下方?jīng)]有超出基線 , 有的文本屬于 jqpy 類型的 , 下方超出基線了 , 還有可能有特殊符號(hào)如度數(shù)符號(hào) , 百分號(hào)等 , 造成了真實(shí)文本與繪圖區(qū)域的差異 ;
繪圖區(qū)域 與 真實(shí)文本區(qū)域 的差異 , 就導(dǎo)致了 文字繪圖 不準(zhǔn)確 , 不好定位的問題 ;
二、將文本中心點(diǎn)與給定中心點(diǎn)對(duì)齊
給定中心點(diǎn) ( x , y ) ;
繪制文本 , 使得 文本的中心點(diǎn) 與 給定的中心點(diǎn)對(duì)齊 ;
根據(jù)中心點(diǎn)位置 :
確定繪制文本的左側(cè)位置 : x - (rect.left + rect.right) / 2 , 繪制的文本 , 是下圖紅色矩形框的位置 , 文本的位置是不確定的 , 可能在紅色矩形框內(nèi)的任意位置 , 需要借助 Rect 邊界確定文本位置 ,
確定繪制文本的頂部位置 : y - (rect.top + rect.bottom) / 2 , 繪制的文本 , 是下圖紅色矩形框的位置 , 文本的位置是不確定的 , 可能在紅色矩形框內(nèi)的任意位置 , 需要借助 Rect 邊界確定文本位置 ;
總結(jié)
以上是生活随笔為你收集整理的【Android 应用开发】Canvas 精准绘制文字 ( 测量文本真实边界 | 将文本中心点与给定中心点对齐 )的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【C 语言】文件操作 ( 使用 frea
- 下一篇: 【C 语言】文件操作 ( C 语言中的文