天天看點

字型在Android View中的輸出 drawText

Canvas 作為繪制文本時,使用FontMetrics對象,計算位置的坐标。

public static class FontMetrics {   

    public float   top;   

    public float   ascent;   

    public float   descent;   

    public float   bottom;   

    public float   leading;   

}  

它的各基準線可以參考下圖: 

上圖其實是通過代碼畫出來的,具體代碼如下:

mPaint.reset();   

mPaint.setColor(Color.WHITE);   

mPaint.setTextSize(80);   

// FontMetrics對象    

FontMetrics fontMetrics = mPaint.getFontMetrics();   

String text = "abcdefg";   

// 計算每一個坐标    

float textWidth = mPaint.measureText(text);   

float baseX = 30;   

float baseY = 700;   

float topY = baseY + fontMetrics.top;   

float ascentY = baseY + fontMetrics.ascent;   

float descentY = baseY + fontMetrics.descent;   

float bottomY = baseY + fontMetrics.bottom;   

// 繪制文本    

canvas.drawText(text, baseX, baseY, mPaint);   

// BaseLine描畫    

mPaint.setColor(Color.RED);   

canvas.drawLine(baseX, baseY, baseX + textWidth, baseY, mPaint);   

mPaint.setTextSize(20);   

canvas.drawText("base", baseX + textWidth, baseY, mPaint);   

// Base描畫    

canvas.drawCircle(baseX, baseY, 5, mPaint);   

// TopLine描畫    

mPaint.setColor(Color.LTGRAY);   

canvas.drawLine(baseX, topY, baseX + textWidth, topY, mPaint);   

canvas.drawText("top", baseX + textWidth, topY, mPaint);   

// AscentLine描畫    

mPaint.setColor(Color.GREEN);   

canvas.drawLine(baseX, ascentY, baseX + textWidth, ascentY, mPaint);   

canvas.drawText("ascent", baseX + textWidth, ascentY + 10, mPaint);   

// DescentLine描畫    

mPaint.setColor(Color.YELLOW);   

canvas.drawLine(baseX, descentY, baseX + textWidth, descentY, mPaint);   

canvas.drawText("descent", baseX + textWidth, descentY, mPaint);   

// ButtomLine描畫    

mPaint.setColor(Color.MAGENTA);   

canvas.drawLine(baseX, bottomY, baseX + textWidth, bottomY, mPaint);   

canvas.drawText("buttom", baseX + textWidth, bottomY + 10, mPaint);  

相信通過以上程式,能夠很好的了解topLine,buttomLine,baseLine,ascentLine,descentLine。 

另外:Paint類有兩個方法

public native float ascent();   

public native float descent();  

ascent():the distance above the baseline(baseline以上的height) 

descent():the distance below the baseline(baseline以下的height)

是以ascent() + descent() 可以看成文字的height。

到此為止,怎麼擷取文字的height和width都已經揭曉了: