在android中绘画文字时,锚点的控制只存在水平LEFT、CENTER、RIGHT三种,在自定义控件中进行绘画对文字的显示很难控制,下面添加了对TOP、CENTER、BOTTOM三种锚点的实现,具体代码如下:
1、描点的定义
/**
* 锚点的位置
*/
interface Anchor {
/**
* 上
*/
static int TOP = 0x01;
/**
* 底部
*/
static int BOTTOM = 0x02;
/**
* 竖直中
*/
static int VCENTER = 0x04;
/**
* 左
*/
static int LEFT = 0x10;
/**
* 水平中
*/
static int HCENTER = 0x20;
/**
* 右
*/
static int RIGHT = 0x30;
}
2、文字绘画的实现
/**
* 获取画笔对应字体的高度
*
* @param paint
* 画笔
* @return 字体高度
*/
public static int getFontHeight(Paint paint) {
FontMetrics fm = paint.getFontMetrics();
return (int) Math.ceil(fm.descent - fm.top) + 2;
}
/**
* 制定锚点与位置绘画文字
* @param canvas 画布
* @param text 文字
* @param x 绘画坐标X
* @param y 绘画坐标Y
* @param anchor 锚点的位置
* @param paint 画笔
*/
public static void drawText(Canvas canvas, String text, float x, float y,
int anchor, Paint paint) {
FontMetrics metrics = paint.getFontMetrics();
float ty = y;
if ((anchor & Anchor.TOP) != 0) {
ty = y - metrics.ascent;
} else if ((anchor & Anchor.VCENTER) != 0) {
ty = y - (metrics.descent + metrics.ascent) / 2;
} else {
ty = y - metrics.descent;
}
canvas.drawText(text, x, ty, paint);
}