Android画布的drawText()方法无法显示

8

我有一个问题,就是在一个背景图像上绘制的安卓文本没有显示出来。我的代码:

@Override
public void draw(Canvas canvas) {
    final float scaleFactorX = getWidth() / WIDTH;
    final float scaleFactorY = getHeight() / HEIGHT;

    if(canvas != null) {
        final int savedState = canvas.save();
        canvas.scale(scaleFactorX, scaleFactorY);

        Paint textPaint = new Paint();
        textPaint.setColor(Color.RED);
        textPaint.setTextSize(20);
        textPaint.setAntiAlias(true);

        canvas.drawBitmap(background, 0, 0, null);
        canvas.drawBitmap(button_start, (canvas.getWidth() - button_start.getScaledWidth(canvas)) / 2, canvas.getHeight() / 4, null);
        canvas.drawText("Test text", 0, 0, textPaint);
        canvas.restoreToCount(savedState);
    }
}

有人知道我做错了什么吗?


3
顺便提一句,避免在onDraw()中创建实例。可以重复使用Paint对象,否则会浪费大量内存。 - user468311
1
canvas.restoreToCount(savedState); 的目的是什么? - cygery
1
@cygery 我原本以为没有它,屏幕会不断重新缩放,从而不断放大。经过测试,似乎并非如此。感谢你提醒我。 - zeno dhaene
1个回答

25

基线的y轴不是0,请尝试以下方法

    Paint textPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG);
    textPaint.setColor(Color.RED);
    textPaint.setTextSize((int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 20, getResources().getDisplayMetrics()));
    textPaint.setTextAlign(Align.LEFT);
    FontMetrics metric = textPaint.getFontMetrics();
    int textHeight = (int) Math.ceil(metric.descent - metric.ascent);
    int y = (int)(textHeight - metric.descent);
    canvas.drawText("text", 0, y, textPaint);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接