【问题标题】:Android Canvas.drawString display problemAndroid Canvas.drawString 显示问题
【发布时间】:2010-06-07 09:36:36
【问题描述】:

我在SurfaceView上显示文字时遇到这个问题,有些字符可以爬上其他的,代码在这里:

private static void fakeDraw(Canvas c)
{
    Paint mPaint = new Paint();
    int color = 0xff000000;
    mPaint.setColor(color);
    mPaint.setStrokeWidth(2);
    mPaint.setStyle(Style.FILL);
    mPaint.setAntiAlias(true);

    FontMetricsInt fm = mPaint.getFontMetricsInt();
    int fh = Math.abs(fm.top); 
    int left = 0;
    int top = 100;
    Rect smallClip = new Rect(left, top-fh, left + 200, top + 30);
    Rect bigClip = new Rect(0, 0, getW(), getH());
    c.drawRect(bigClip, mPaint);
    String text1 = "Evi";
    String text2 = ">>";
    String text3 = "Tom";

    color = 0xff303030;
    mPaint.setColor(color);
    c.drawRect(smallClip, mPaint);

    color = 0xffffffff;
    mPaint.setColor(color);
    c.drawText(text1, left, top, mPaint);

    Rect bounds = new Rect();
    mPaint.getTextBounds(text1, 0, text1.length(), bounds);

    left += bounds.width();
    c.drawText(text2, left, top, mPaint);

    left -= bounds.width();
    top += 12;
    c.drawText(text3, left, top, mPaint);
    mPaint.getTextBounds(text3, 0, text3.length(), bounds);
    left += bounds.width();
    c.drawText(text2, left, top, mPaint);
    }

在第二个文本 Tom>> 的情况下全部正确显示,但第一个文本 Evi>> 不正确。问题是字符 >> 在 Evi 绘图空间中绘制(最后一个字符“i”)!可以查看是否缩放图片,我做错了什么以及如何解决这个问题?

可以在此处找到屏幕截图:http://img192.imageshack.us/img192/2782/imagexs.png

【问题讨论】:

  • 我并没有真正看到问题所在,您能否再解释一下您期望代码的行为方式以及您认为哪里有问题?
  • 这看起来像正常的抗锯齿行为。关闭抗锯齿后效果如何?
  • 当我想在 x 和 y 位置绘制字符时,我希望文本在这个位置精确绘制,而不是在 x-1 或类似的位置。
  • RoToRa,在关闭抗锯齿的情况下,效果更好:) 谢谢!是否有任何变体来绘制抗锯齿文本而不使用字符 clibing?

标签: android canvas metrics drawtext


【解决方案1】:

嗯,尝试指定特定的 x / y 坐标?用数字而不是预定义的字符串?给“>>”不同的坐标作为它的绘图空间。

【讨论】:

  • 在这种情况下,>> 的第一个像素从实际 x 坐标向左绘制。
【解决方案2】:

只需手动添加一些空间

c.drawText(text2, left + 2, top, mPaint);

或在 text2 的开头添加一个空格字符 (" ")

【讨论】:

    猜你喜欢
    • 2015-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-10
    • 2017-01-20
    • 2014-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多