
font
这是一个文字的坐标系
这是一个非常蛋疼的坐标系
在canvas中怎么才能把文字画在正中间????下面我们来讨论一下
canvas有个方法专门绘制文字
canvas.drawText(text , X, Y, mPaint); //这是比较常用的方法
左右居中很好实现,只要给Paint设置一下就好了
mPaint.setTextAlign(Paint.Align.CENTER);
这样把你计算的文字的中心点的X坐标传入canvas.drawText(text , X, Y, mPaint)就好;
但是Y轴的中心点就非常蛋疼了!!!
因为drawText方法传入的Y参数的坐标既不是文字的底端(descent),也不是文字的中间,而是baseline的位置!!!!
++我们可以计算出文字居中后 中心点的Y轴坐标,但是怎么才能获取baseline的Y轴坐标呢????++
唉...数学老师死得早....
/**
* FontMetrics中保存了文字的一些属性
* 其中规定了baseline = 0
* 而其他值都是相对于baseline的坐标,这个坐标是一个文字自己的坐标系,与外部无关
*
* 我们来对照上面的图来看看--------------------------------------
* public float top (这个是最上面,是个负值)
* public float ascent (这个是文字所绘制到的顶端,是个负数)
* public float descent (这个是文字所绘制到的底端,是个正数)
* public float bottom (这个是最下面,是个正数)
* ------------------------------------------------------------
* 好了,有了这些可以计算出baseline在绘制的时候的Y坐标了
*/
Paint.FontMetrics fm = mPaint.getFontMetrics();
//假设已经计算出文字上下居中后Y轴的坐标为 ---> y;
float textY = y + (fm.descent - fm.ascent) / 2 - fm.descent;
// --------------------------------------------------
好了如果以后需要自己绘制文字,而又想要居中的同学,这么计算就没问题了!