drawText实现文字居中绘制

方法参数解读

/**
 * Draw the text, with origin at (x,y), using the specified paint. The
 * origin is interpreted based on the Align setting in the paint.
 *
 * @param text  The text to be drawn
 * @param x     The x-coordinate of the origin of the text being drawn
 * @param y     The y-coordinate of the origin of the text being drawn
 * @param paint The paint used for the text (e.g. color, size, style)
 */
第二个参数:baseLine 的 x值
第三个参数:baseLine 的 y值
public void drawText(@NonNull String text, float x, float y, @NonNull Paint paint) {} 参数解读

方法一

首先自己动手做实验,自己定一个baseline,然后把文字画上去,再画上FontMetrics的几条线。FontMetrics里是字体图样的信息,有float型int型的版本,都可以从Paint中获取。它的每个成员数值都是以baseline为基准计算的,所以负值表示在baseline之上。

Rect targetRect = new Rect(0, 0, getMeasuredWidth(), getMeasuredHeight());  //文字在 targetRect 居中
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setStrokeWidth(3);
paint.setTextSize(80);
String testString = "测试:ijkJQKA:1234";
paint.setColor(Color.BLACK);
canvas.drawRect(targetRect, paint);
paint.setColor(Color.RED);
Paint.FontMetricsInt fontMetrics = paint.getFontMetricsInt();
// 转载请注明出处:http://blog.csdn.net/hursing
//int baseline = targetRect.centerY() - (fontMetrics.bottom + fontMetrics.top) / 2;一样
int baseline = (targetRect.bottom + targetRect.top - fontMetrics.bottom - fontMetrics.top) / 2;
paint.setTextAlign(Paint.Align.CENTER); //注意,drawText 对应改为传入targetRect.centerX()
canvas.drawText(testString, targetRect.centerX(), baseline, paint);

核心代码:

*写法1
    paint.setTextAlign(Paint.Align.CENTER); //注意,drawText对应改为传入targetRect.centerX()
    canvas.drawText(testString, targetRect.centerX(), baseline, paint);
*写法2
    Rect mTextRect = new Rect();
    paint.getTextBounds(testString, 0, testString.length(), mTextRect);
    int x = targetRect.centerX() - mTextRect.centerX();
    canvas.drawText(testString, x, baseline, paint);

方法二

  1. init 中通过制定的 Paint 对象计算 mTextBound
mBackPaint.setStyle(Style.FILL);
mBackPaint.setTextScaleX(2f);
mBackPaint.setColor(Color.BLACK);   // 绘画字体的颜色
mBackPaint.setTextSize(30);
mBackPaint.getTextBounds(mText, 0, mText.length(), mTextBound);
  1. 在 onDraw 中
//控制好+-号, 计算width时: 计算height时:
canvas.drawText(mText, (getWidth() - mTextBound.width()) / 2
    ,(getHeight() + mTextBound.height()) / 2, mBackPaint);

参考资料

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,734评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,931评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,133评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,532评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,585评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,462评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,262评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,153评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,587评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,792评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,919评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,635评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,237评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,855评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,983评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,048评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,864评论 2 354

推荐阅读更多精彩内容

  • 一、概述 1. 四线格与基线 小时候,我们在刚开始学习写字母时,用的本子是四线格的,我们必须把字母按照规则写在四线...
    addapp阅读 7,656评论 2 17
  • Android - Canvas 简单总结: http://www.cnblogs.com/hwgt/p/5416...
    zhangdong0921阅读 453评论 0 0
  • 婚姻对一个女生意味着什么? 一个人生最好的归宿,爱情的最完美的终站点 身边那一对 曾经的幸福的只有对方,令我惊叹爱...
    颜定阅读 218评论 0 0
  • 我是谁(二) 生命的旅程一直向前行驶,回眸过去,我们可以看到自己曾经轻舞飞扬,看到自己曾经热泪盈眶,看到自己曾经跌...
    许敏雅兰阅读 375评论 0 1
  • 感谢天,感谢地,感谢在玫瑰花开的季节下的那场玫瑰雨。 淅淅沥沥的小雨终于停了,我漫步走进公园看到樱桃花开了,粉红粉...
    敕勒川云海峰阅读 371评论 2 3