我已经做了几次测试,将文本放在画布上的给定位置,并得出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);
}
}
答案 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()
返回矩形的宽度。这不会检查有效的矩形(即左< =右),因此结果可能是负的。