如何使drawText()准确定位?

时间:2016-09-07 10:37:38

标签: android canvas drawtext

我已经做了几次测试,将文本放在画布上的给定位置,并得出drawText()无法正常工作的结论。 (我的示例代码和屏幕截图将显示。)如果可能,请给我一个如何克服这个问题的建议。

如果有任何文字(在我的例子中只是" 123")我可以正确地得到文本的大小。但是,定位(主要是水平)不准确。更糟糕的是,这种现象与所有角色都不一样。例如。如果文本以" A"开头,则按预期工作。

我在屏幕截图中添加了两个区域。与" 123"显示文本如何向右偏移。与" A12"显示定位正确时的外观。我的代码绘制了一个灰色控制矩形,其中包含为文本指定的尺寸。人们应该期望文本恰好出现在这个框架中。但事实并非如此。遇到这个问题,就不可能准确地在图纸中设置任何文字。

package com.pm.pmcentertest;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.view.View;

public class Draw extends View {

public Paint myPaint;

public Draw(Context context) {
    super(context);
    myPaint = new Paint();
 }

protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    canvas.drawColor(Color.CYAN);

    // The text shall appear in the lower left corner
    int x = 0;
    int y = canvas.getHeight();

    // We use a large text size for demonstration
    String Text = "123";
    myPaint.setTextSize(400);

    // We get the dimensions of the text
    Rect bounds = new Rect();
    myPaint.getTextBounds(Text, 0, Text.length(), bounds);

    // Now we draw a rectangle for the area in which the text should appear
    // using the TextBounds values
    myPaint.setColor(Color.parseColor("GREY"));
    canvas.drawRect(x, y - bounds.height(), x + bounds.width(), y, myPaint);

    // Now we draw the text to the same position
    myPaint.setColor(Color.parseColor("WHITE"));
    canvas.drawText(Text, x, y, myPaint);

  }
}

Negative example with offset

Positive example when start with A

1 个答案:

答案 0 :(得分:0)

问题出在Rect对象中。你必须改变你的代码:

canvas.drawRect(x, y - bounds.height(), x + bounds.width(), y, myPaint);

bounds.width() - > bounds.right

canvas.drawRect(x, y - bounds.height(), x + bounds.right, y, myPaint);

方法width()返回矩形的宽度。这不会检查有效的矩形(即左< =右),因此结果可能是负的。