Canvas drawText实现中英文居中

@Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

            Paint mTextPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
            // Measure a text
            Rect textBounds = new Rect();
            mTextPaint.getTextBounds(String.valueOf(mLetter), 0, 1, textBounds);
            float textWidth = mTextPaint.measureText(String.valueOf(mLetter));
            float textHeight = textBounds.height();

            FontMetrics fontMetrics = mTextPaint.getFontMetrics();
            // 计算文字高度
            float fontHeight = fontMetrics.bottom - fontMetrics.top;
            // 计算文字baseline
            float textBaseY = getHeight() - (getHeight() - fontHeight) / 2
                    - fontMetrics.bottom;

            // Draw the text
            canvas.drawText(String.valueOf(mLetter), getWidth() / 2f
                    - textWidth / 2f, textBaseY, mTextPaint);
    }
时间: 2024-10-14 01:11:37

Canvas drawText实现中英文居中的相关文章

android canvas drawText()文字居中

近期也是在学习自己定义控件,曾经仅仅自己随便玩了下,一直认为比較难,正好如今工作轻松,每天闲着就看看书看看帖子学习自己定义控件,你还别说自己定义控件学起来还是蛮有趣的!! 这里也跟大家分享下我关于drawText()文字居中的方法. 先附上drawText()的方法说明 说实话当时看了这个,我也没明确这个x,y坐标究竟表达的啥意思,还一直以为是绘制文字中心的坐标,后来发现这个理解是错误的 要想理解这个首先看张图 像图上这样安卓的文字绘制是相对于基线绘制的,也就是图中的红线,而top+bottom

canvas drawText 如何居中显示。

网上很多关于将text居中到某个矩形或者bitmap中的例子,但是我觉得很多是错的,特别是一些人希望通过观察然后设置某个偏移量让它尽可能居中,我觉得这是再误人子弟.android连text居中都做不到的话,那它就改退出这个市场了. 废话不多说本人是从一篇文章中得到的启示,作为尊重他人我附上这篇文章,供大家参考.http://www.doc88.com/p-3953907358643.html 当然这篇文章讲的不是很详细,特别是对baseline这个值的求法是对的但是表达形式上我觉得不是很满意,所

android中canvas.drawText参数的介绍以及绘制一个文本居中的案例

float baseline = height/2 + mPaint.getTextSize()/2 - mPaint.getFontMetrics().descent;文字尺寸就是 protected void onDraw(Canvas canvas) { String testString = "测试:gafaeh:1234"; Paint mPaint = new Paint(); mPaint.setStrokeWidth(3); mPaint.setTextSize(40)

关于Canvas.drawText中xy位置问题

问:canvas.drawText("3", x, y, paint);  x和y是指画得时候数字3中心的坐标吗?还是左上角的坐标?答:x默认是'3'这个字符的左边在屏幕的位置,如果设置了paint.setTextAlign(Paint.Align.CENTER);那就是字符的中心,y是指定这个字符baseline在屏幕上的位置.public void drawText (String text, float x, float y, Paint paint)Since: API Lev

关于Android Canvas.drawText方法中的坐标参数的正确解释

canvas.drawText("www.jcodecraeer.com", x, y, paint);  x和y参数是指定字符串中心的坐标吗?还是左上角的坐标?这个问题的直观印象应该是左上角的坐标,但是安卓的处理有点另类,我都怀疑安卓的设计者是不是脑壳有问题了.x默认是‘www.jcodecraeer.com’这个字符串的左边在屏幕的位置,如果设置了paint.setTextAlign(Paint.Align.CENTER);那就是字符的中心,y是指定这个字符baseline在屏幕上

Android Canvas.drawText方法中的坐标参数的正确解释

摘要 canvas.drawText(www.jcodecraeer.com, x, y, paint); x和y参数是指定字符串中心的坐标吗?还是左上角的坐标?这个问题的直观印象应该是左上角的坐标,但是安卓的处理有点另类,我都怀疑安卓的设计者是不是脑壳有问题了. x默认是‘www.jcodecraeer.com’这 canvas.drawText("www.jcodecraeer.com", x, y, paint);  x和y参数是指定字符串中心的坐标吗?还是左上角的坐标?这个问题

canvas.drawText把文字画到view的最中间

画不多说先来个效果图 红色圆形就是一个自定义的view  中间的文字也是上下居中的效果 //获取paint中的字体信息 settextSize要在他前面 FontMetrics fontMetrics = paint.getFontMetrics(); // 计算文字高度 float fontHeight = fontMetrics.bottom - fontMetrics.top; // 计算文字高度baseline float textBaseY = getHeight() - (getHe

Android Canvas drawText实现中文垂直居中

public void onDraw (Canvas canvas) { Rect targetRect = new Rect(50, 50, 1000, 200); Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); paint.setStrokeWidth(3); paint.setTextSize(80); String testString = "Text:中文asdfghjkl"; paint.setColor(Color.CYAN

android学习16#--学习canvas.drawText

本来这篇文章是要写写我在设计高级跑马灯程序的心得的,但是编写过程中花了近一天多的时间搞明白canvas.drawText中的第三个参数[float y]代表的真实含义.学习本文应该能帮助大家掌握FontMetrics类和Rect类成员变量值具体含义. drawText引出问题 先来看看api中是如何定义drawText的参数. /** * Draw the text, with origin at (x,y), using the specified paint. The * origin is