10

Canvasandメソッドを使用するとdrawText()、Android 4.2.1 で別のレンダリングが表示されます。

4.2未満:

ここに画像の説明を入力

Android 4.2.1 (Nexux 7) の場合:

ここに画像の説明を入力

ご覧のとおり、消費は非常にタイトです。4.2.1 で導入されたカーニングの問題のようです。テキストの描画に使用される Paint は特別なものではありません。

titlePaint = new Paint();
titlePaint.setAntiAlias(true);
titlePaint.setColor(0xffffffff);
titlePaint.setTextSize(0.125f);
titlePaint.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));
titlePaint.setTextAlign(Align.CENTER);
titlePaint.setLinearText(true);

使用しないtitlePaint.setLinearText(true)と、4.2.1 で奇妙な結果が得られます。

Nexus 7 上の Android 4.2: canvas.drawText() が正しく機能しない

編集:

この奇妙な動作は Android チーム ( http://code.google.com/p/android/issues/detail?id=39755 )に報告されていますが、まだ「公式」の問題ではありません。

編集 (2):

一部の噂では、問題は textSize < 1.0f であると主張しています...

4

4 に答える 4

14

現在使用している回避策:

scalePaint.setTextSize(1.5f);

次に、onDraw メソッドで:

canvas.save();
canvas.scale(0.01f, 0.01f);
canvas.drawText(""+i, 0.5f*100, 0.8f*100, scalePaint);                  
canvas.restore();

ご覧のとおり、テキストの位置を元に戻しているので、本来あるべき場所になります。

于 2013-02-12T16:02:52.597 に答える
10

特定の問題の回避策を提案した唯一の回答を受け入れた後、私は自分の質問に答えます。それは「素晴らしい」「決定的な」解決策になる可能性があります。

public static void drawTextOnCanvasWithMagnifier(Canvas canvas, String text, float x, float y, Paint paint) {
        if (android.os.Build.VERSION.SDK_INT <= 15) {
            //draw normally
            canvas.drawText(text, x, y, paint);
        }
        else {
            //workaround
            float originalTextSize = paint.getTextSize();
            final float magnifier = 1000f;
            canvas.save();
            canvas.scale(1f / magnifier, 1f / magnifier);
            paint.setTextSize(originalTextSize * magnifier);
            canvas.drawText(text, x * magnifier, y * magnifier, paint);
            canvas.restore();
            paint.setTextSize(originalTextSize);
        }
    }
于 2013-02-20T20:13:30.427 に答える
0

これは Android のバグであり、すでにバグ トラッカーに送信されていますが、注意を引くために +1 することをお勧めします:問題 39755

于 2013-01-03T20:40:07.497 に答える