基线(baeseline),坡顶(ascenter),坡底(descenter)
上坡度(ascent),下坡度(descent)
行间距(leading):坡底到下一行坡顶的距离
字体的高度=上坡度+下坡度+行间距
ascent是指从一个字的基线(baseline)到最顶部的距离,descent是指一个字的基线到最底部的距离
注意, ascent和top都是负数
下面代码实现高度只有0.75单元格高度的居中显示,所以要下移一定距离y。
foreground.setStyle(Style.FILL);
foreground.setTextSize(height * 0.75f);
foreground.setTextScaleX(width / height);
foreground.setTextAlign(Paint.Align.CENTER);
// Draw the number in the center of the tile
FontMetrics fm = foreground.getFontMetrics();
// Centering in X: use alignment (and X at midpoint)
float x = width / 2;
// Centering in Y: measure ascent/descent first
float y = height / 2 - (fm.ascent + fm.descent) / 2;
网络的例子:(引用http://www.j<wbr>avaeye.com/t<wbr>opic/474526)</wbr></wbr>
package com.TextTest;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.FontMetrics;
import android.os.Bundle;
import android.view.View;
public class TextTest extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.main);
setContentView(new GraphView(this));
}
static public class GraphView extends View {
public GraphView(Context context) {
super(context);
}
@Override
protected void onDraw(Canvas canvas) {
//
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);
}
}
}
分享到:
相关推荐
Descent是文字底部到Baseline的距离,Ascent是文字顶部到Baseline的距离,而Leading则是行间距,通常在英文或中文中,Leading为0。文字高度的完整公式是:文字高度 = Descent + Ascent + Leading。在没有特殊字符如...
ASCENT是字体设计中的一部分,它与DESCENT(字体的下降部分)一起决定了字体的行高。行高是文本行之间合适的间距,有助于提高阅读舒适度。在编程和设计软件中,可以调整字体的ascender和descender属性来优化文本的...
float y = 50 + paint.getFontMetrics().descent - paint.getFontMetrics().ascent; // 文字起始y坐标,确保文字居中 canvas.drawText(text, x, y, paint); ``` 6. **保存图片到SD卡**:完成绘制后,将Bitmap保存到...
首先,FontMetrics 的参数可以分为六类:基准点(baseline)、ascent、descent、leading、top、bottom。基准点是字体的基准线,ascent 是字体的最高点到基准线的距离,descent 是字体的最低点到基准线的距离。...
英文字体图像的结构,ascent line/ascender line/cap line/mean line/baseline/descender line/descent line。简单情形可看: https://blog.csdn.net/quantum7/article/details/127615203
在Android中,我们可以使用`setTextAlign()`方法来改变文字的对齐方式,包括左对齐(`Paint.Align.LEFT`)、居中对齐(`Paint.Align.CENTER`)和右对齐(`Paint.Align.RIGHT`)。不同的对齐方式会影响`x`参数的实际...
FontMetrics 类有五个成员变量:top、ascent、baseline、descent、bottom 和 leading。这些变量的值都代表着不同的坐标位置,例如 top 代表从基线向上绘制区域的最高点,ascent 代表单行文本,从基线向上绘制的推荐...
Vertu Ascent Ti 手机具有数字键盘,用于输入文字和数字。手机还具有多种按键,包括发送键、选择键、私人助理按钮等。 Vertu Ascent Ti 手机安全信息 Vertu Ascent Ti 手机具有多种安全功能,包括 PIN 码授权、...
baseline = (canvas.getHeight() - fontMetrics.descent) + fontMetrics.ascent; canvas.drawText(text, drawTextX, baseline, paint); if (isStarting) { drawTextX -= scrollTile; if (drawTextX ) { ...
int y = (getHeight() + paint.getFontMetrics().ascent) / 2; // 设置阴影属性 paint.setShadowLayer(radius, dx, dy, color); // 重新绘制带阴影的文本 canvas.drawText(text, x, y, paint); } ``` 这里的`...
在Android开发中,有时我们需要对字体的宽高进行精确的控制,例如在自定义View或者绘制文本时。本文将详细讲解如何在Android中获取字体的宽度和高度。 首先,我们来理解一下Android中的字体概念。在Android系统中,...
- **函数定义**:`function[theta,ll]=logistic_grad_ascent(X,y)`。 - **输入参数**:特征矩阵\( X \)和标签向量\( y \)。 - **输出参数**:最终参数\( \theta \)和每次迭代后的对数似然值\( ll \)。 - **关键步骤*...
y += paint.getFontMetricsInt().descent - paint.getFontMetricsInt().ascent; } } } ``` 这个例子只是一个起点,实际的自定义逻辑需要根据具体需求进行调整。在自定义View时,需要注意性能优化,如避免不必要...
在Android开发中,字体的布局和显示是用户体验的重要组成部分。`FontMetrics`是Android系统提供的一种工具类,用于获取字体的尺寸信息,帮助开发者更好地控制文本的显示效果,尤其是在自定义View时。本文将深入探讨`...
float y = (height + textPaint.descent() + textPaint.ascent()) / 2f; canvas.drawText(code, x, y, textPaint); // 添加干扰线 for (int i = 0; i ; i++) { Paint linePaint = new Paint(Paint.ANTI_ALIAS_...
此外,用户还需要了解一些重要信息,如 Vertu Ascent RHV1 已获得在 EGSM 900 和 GSM 1900 网络中使用的许可,并且需要遵守所有法律并尊重他人的隐私和合法权利。 Vertu Ascent RHV1 的使用方法包括待机屏幕的使用...
float y = canvas.getHeight() / 2 + paint.getFontMetrics().descent - paint.getFontMetrics().ascent; // 计算Y坐标 canvas.drawText("Hello, World!", x, y, paint); ``` `drawText()`方法不仅限于绘制简单的...
总结来说,`FontMetrics`是Android中处理文字绘制时的重要工具,它的属性提供了对字体尺寸和位置的详细描述。通过合理利用这些信息,开发者可以创建出更加精致和用户体验良好的文本展示效果。希望本文能对你在...
1. **测量尺寸**:在`onMeasure()`方法中,我们需要计算出文本的宽度和高度。这通常通过`Paint.measureText()`和`Paint.getFontMetrics()`来获取。测量结果将用于确定View的大小,确保文本能完全显示。 2. **确定...