问题现象
最近在开发项目的时候,我遇到了一个问题,就是文字 宽度 和 基线 获取不准的情况,导致绘制的文字总是偏的,这可让我急死了,不过,好在找到了问题所在。
问题来源
趁着这个机会,我们也来总结一下如何获取文字基线和文字宽高,废话不多说,上码!!!
首先,我们来获取文字基线
private int getTextBaseLine() {
Paint.FontMetricsInt fontMetricsInt = mLoadingTextChangePaint.getFontMetricsInt();
int dy = (fontMetricsInt.bottom - fontMetricsInt.top)/2 - fontMetricsInt.bottom;
return getHeight()/2 + dy;
}
前面章节,我画图解析过,大家可以自行查看Android自定义控件(四)---实战篇(详解onDraw),在这里我只是把代码封装一下。
然后,获取文字宽高
private int getTextWidth(String str) {
Rect bounds = new Rect();
mLoadingTextNormalPaint.getTextBounds(str,0,str.length(),bounds);
return bounds.width();
}
private int getTextHeight(String str) {
Rect bounds = new Rect();
mLoadingTextNormalPaint.getTextBounds(str,0,str.length(),bounds);
return bounds.height();
}
问题分析
分析的的原因就是 获取 基线 和 宽高 是在 设置画笔文字大小之前。
从代码中可以看到 ,我们获取 基线 和 宽高 都是基于 绘制文字的画笔 , 而你却把设置 绘制文字的画笔 方法 写在后面 ,你说你如何能正确获取到文字的 基线和宽高。
从简来说:就是代码顺序写错了。
总结
这个问题可能是小概率事件,但是,我这个人就是这样的,出了问题就想记录一下。哈哈哈!!!