android 字型繪製,計算距離 筆記,android繪製
轉載請註明出處,如有錯誤,請指出
Android FontMetrics 在Paint類裡面定義,分別有5個屬性,想要理解這個屬性,來拿出筆,跟我畫,並且我們對照圖來理解其中屬性:
top:中的Ag最上面那頂綠、綠線~,對就是他,就是我們看到的top,從字型baseline以上,用來限制最大高度。baseline在哪裡呢?圖中那條藍色線即是。
ascent: baseline以上,那條紅線。
descent:baseline以下,那條綠線。
bottom:圖中木有畫出來。他在decent下面,也就是限制最低高度的。可以懂吧?~
leading:這個呢,根據我查的資料、和我個人的理解,leading是有倆個地方的。一個是現在圖中top - ascent的距離,也就是 頂部綠線到紅線的距離,另外一個是圖中未標註出來的,bottom-descent的距離,就是底部綠線一下的那一點。
我們通過
FontMetrics fontMetrics = new FontMetrics();
paint.getFontMetrics(fontMetrics);
方法擷取他。
這裡,我們再看幾個圖,以加深理解:
下面這個圖好複雜,算了,可以略過,就當備忘以做後用。。
下面,我要畫出如的字,該如何計算距離呢
首先第一行:“test測試test測試”
我們不用canvas的位移來繪製,
直接通過他的方法:drawText(string, float , float , paint)方法來繪製
drawText(string, float , float , paint)這個方法,繪製的字會在float x, float y上方。所以這裡的x,y即理解為基準位置。
在繪製第一行時候我們只要計算出baseline距離,直接繪製即可。
第二行:“再來一行” 直接選用,那就是他的FontMetrics.height即可。
部分有參考意義的測試代碼:(有很多可以修改的地方)
final float marginTop = 1;final float metricsHeight = metrics.bottom - metrics.top;final float leading = metrics.leading;final float baseline = metrics.leading - metrics.top;float temp1 = marginTop + baseline; float temp2 = metricsHeight + leading;for (int i = 0; i < lineCount; i++) {canvas.drawText(strs[i], rectF.centerX(), ,<span style="font-family: Arial, Helvetica, sans-serif;">temp1 + i * temp2</span><span style="font-family: Arial, Helvetica, sans-serif;">, paint);</span>}
最後,,csdn真的bug有點多啊,貼圖貼不上,代碼粘貼進來複製修改就壞了。。。求推薦一個靠譜的做筆記的網站。