canvas的drawText 如何将文字绘制在控件的中心
来源:互联网 发布:别墅网络覆盖方案 编辑:程序博客网 时间:2024/06/07 02:48
canvas.drawText(String text,float x,float y,Paint mTextPaint);
第一个参数就不用说,就是你要写的字
第二个参数就是从哪里开始写 一般就是1/2*height+mTextPaint.measureText(text)/2;
然后第三个参数就是最麻烦的
先看一张图
y坐标就是baseline所在的那条线
那我们先假设 如果我们一开始设置baseline是1/2*控件的高度(下面都用height)那么我们看一下效果,我写了一个简单的demo
代码:
protected void onDraw(Canvas canvas) {canvas.drawCircle(width/2, height/2, width/2, mCirclePaint);float textWidth=mTextPaint.measureText(text);float Textx=width/2-textWidth/2;canvas.drawText(text, Textx, height/2, mTextPaint);}看一下效果:
可以很明显的看到有点靠上了,达不到在中间的效果,这样做的效果其实就是第一张图中我们把baseline设置到了红线的上面(红线你可以看成(font.descent-font.ascent)/2(因为ascent是基于baseline上面,所以是负数,反之descent是整数,相减就是他们之间的距离)),现在我们要把baseline往下移了,那么移动的距离就是就是红线到baseline的距离,因为红线可以看成是(font.descent-font.ascent)/2,所以这个值减去font.descent就是红线与baseline的距离,然后最后的公式就是:
float dy=(fontMetrics.descent-fontMetrics.ascent)/2-fontMetrics.descent;//红线与baseline距离
float Texty=height/2+dy;//这就是y的值了!
注:为什么说我们把baseline设置到了红线的上面,你就想height/2的view的中间轴,(font.descent-font.ascent)/2是文字的中间轴,就比如(0+10)/2==(3+7)/2,我就不多说了吧!
最后附上代码和效果图:
protected void onDraw(Canvas canvas) {canvas.drawCircle(width/2, height/2, width/2, mCirclePaint);float textWidth=mTextPaint.measureText(text);float Textx=width/2-textWidth/2;FontMetrics fontMetrics=mTextPaint.getFontMetrics();float dy=(fontMetrics.descent-fontMetrics.ascent)/2-fontMetrics.descent;float Texty=height/2+dy;canvas.drawText(text, Textx, Texty, mTextPaint);}
- canvas的drawText 如何将文字绘制在控件的中心
- HTML5 canvas 绘制的文字如何换行?
- Canvas---文字的绘制
- Canvas.drawText绘制文字为什么会偏上?
- Canvas.drawText绘制文字为什么会偏上?
- Canvas.drawText绘制文字为什么会偏上?
- Canvas的drawText绘制文本不自动换行的解决
- Android绘图实例(Bitmmap,Canvas,Pain的使用)&动态的在图片上添加文字(canvas.drawText)
- canvas.drawText把文字画到view的最中间
- Canvas.drawText()时,文字基线baseline的计算
- Android 史上最简单的实现Canvas drawText文字垂直居中
- android自定义控件canvas.drawText()的坐标问题
- android canvas.drawText()的研究
- android canvas.drawText()的研究
- Canvas的drawText方法详解
- Android DrawText 字符串的绘制
- android中canvas.drawText参数的介绍以及绘制一个文本居中的案例
- android中canvas.drawText参数的介绍以及绘制一个文本居中的案例
- MySQL 添加 新用户
- 智能指针之shared_ptr
- LintCode算法题解
- UVA 11021 Tribles
- 使用getopt命令解析shell脚本的命令行选项
- canvas的drawText 如何将文字绘制在控件的中心
- 单选框的用法即几种常见对话框
- 带符号整数的除法与余数
- lightoj 1369 - Answering Queries (数学、规律、水)
- linux proc文件系统使用之单次读
- 浅谈EditText
- csu 1416 Practical Number(数论,结论题)
- 不等概率采样
- 暑期dp46道(43)--HDOJ 1159 最长公共子序列(可不连续)