关于canvas文字居中的问题,特别是上下居中,垂直居中

关于canvas文字居中的问题,特别是上下居中,垂直居中_第1张图片
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;
//  --------------------------------------------------

好了如果以后需要自己绘制文字,而又想要居中的同学,这么计算就没问题了!

你可能感兴趣的:(关于canvas文字居中的问题,特别是上下居中,垂直居中)