【问题标题】:Using the canvas.drawText() while creating a Custom View在创建自定义视图时使用 canvas.drawText()
【发布时间】:2015-04-10 09:38:59
【问题描述】:

我正在创建一个自定义视图,我必须在画布上的特定位置绘制文本。为了使用 canvas.drawText(),我们必须创建一个在调用 drawText() 时必须作为参数传递的绘制对象。如果我想让文本呈现为居中对齐,我在制作绘制对象时使用 setTextAlign() 调用。

    statPaint.setTextAlign(Paint.Align.CENTER);

另外,当我调用drawText()时,我需要设置要渲染的文本的起点,如下所示。

    canvas.drawText(stat1,paddingLeft,paddingTop,statPaint);

paddingLeft 和 paddingTop 告诉 drawText() 从哪里绘制文本。函数调用必须传递这两个参数。但我仍然无法使文本居中对齐。如何使此文本居中对齐。

另外,如果我想在同一行中获取两个不同的文本,第一个在屏幕的前半部分居中对齐,第二个文本在屏幕的后半部分居中对齐,我该怎么做那?屏幕垂直分成两半。

提前致谢。

【问题讨论】:

    标签: android canvas paint android-custom-view drawtext


    【解决方案1】:

    这里是如何在任何矩形中居中文本(只需更改左/右/上/下)

    // Allocated once as a member var, not in each onDraw
    private Rect rect = new Rect();
    
    // Inside onDraw
    int left = 0;
    int right = getWidth();
    int top = 0;
    int bottom = getHeight();
    
    paint.getTextBounds(text, 0, text.length(), rect);
    FontMetrics fm = paint.getFontMetrics();
    
    float x = left + (right - left - rect.width()) / 2; 
    float y = top + (bottom - top) / 2 - (fm.descent + fm.ascent) / 2; 
    canvas.drawText(text, x, y, paint);
    

    【讨论】:

    • 初始化为矩形的值是否是矩形的边界,其中文本要居中对齐? getTextBounds() 有什么作用?你能解释一下最后三行是做什么的吗?
    • 在调试时 x 和 y 的值是 1.0 和 1.22,所以那里有一些问题。
    • 我对矩形的输入是 left = 0,top = 378,right=540,bottom 是 432。为此,我将 x 和 y 分别设为 1.0 和 1.22。
    • 确保为您的绘画设置了文本大小,并且您的文本字符串不为空
    猜你喜欢
    • 1970-01-01
    • 2012-06-26
    • 2011-05-24
    • 1970-01-01
    • 1970-01-01
    • 2020-08-20
    • 2020-06-03
    相关资源
    最近更新 更多