Canvas 作為繪制文本時,使用FontMetrics對象,計算位置的坐標。
它的思路和java.awt.FontMetrics的基本相同。
FontMetrics對象
它以四個基本坐標為基准,分別為:
・FontMetrics.top
・FontMetrics.ascent
・FontMetrics.descent
・FontMetrics.bottom
該圖片將如下
- Paint textPaint = new Paint( Paint.ANTI_ALIAS_FLAG);
- textPaint.setTextSize( 35);
- textPaint.setColor( Color.WHITE);
-
- // FontMetrics對象
- FontMetrics fontMetrics = textPaint.getFontMetrics();
-
- String text = "abcdefghijklmnopqrstu";
-
- // 計算每一個坐標
- float baseX = 0;
- float baseY = 100;
- 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, textPaint);
-
- // BaseLine描畫
- Paint baseLinePaint = new Paint( Paint.ANTI_ALIAS_FLAG);>
- baseLinePaint.setColor( Color.RED);
- canvas.drawLine(0, baseY, getWidth(), baseY, baseLinePaint);
-
- // Base描畫
- canvas.drawCircle( baseX, baseY, 5, baseLinePaint);
-
- // TopLine描畫
- Paint topLinePaint = new Paint( Paint.ANTI_ALIAS_FLAG);
- topLinePaint.setColor( Color.LTGRAY);
- canvas.drawLine(0, topY, getWidth(), topY, topLinePaint);
-
- // AscentLine描畫
- Paint ascentLinePaint = new Paint( Paint.ANTI_ALIAS_FLAG);
- ascentLinePaint.setColor( Color.GREEN);
- canvas.drawLine(0, ascentY, getWidth(), ascentY, ascentLinePaint);
-
- // DescentLine描畫
- Paint descentLinePaint = new Paint( Paint.ANTI_ALIAS_FLAG);
- descentLinePaint.setColor( Color.YELLOW);
- canvas.drawLine(0, descentY, getWidth(), descentY, descentLinePaint);
-
- // ButtomLine描畫
- Paint bottomLinePaint = new Paint( Paint.ANTI_ALIAS_FLAG);
- bottomLinePaint.setColor( Color.MAGENTA);
- canvas.drawLine(0, bottomY, getWidth(), bottomY, bottomLinePaint);