7

Google Play で公開されているアプリケーションで重大な問題に直面しており、4.0 を除くすべてのバージョンの Android で問題なく動作しているようです。

これは、私の Android 4.0 HTC フォンのスクリーンショットです。

ここに画像の説明を入力

そして、これは私がNexus 7、Android 4.2.1で得たものです(エミュレーターでの同じ動作):

ここに画像の説明を入力

を使用して描画された各テキストで同じ動作が見られますcanvas.drawText()

テキストの描画に使用されるペイントは次のとおりです。

paint = new Paint();
paint.setAntiAlias(true);
paint.setColor(color); //some color
paint.setTextSize(size); //some size
paint.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));
paint.setTextAlign(Align.CENTER);

logCat (4.2.1 エミュレーター) では、多くのことがわかります

12-18 20:42:21.096: W/Trace(276): Unexpected value from nativeGetEnabledTags: 0

マニフェストでこれらの設定を使用します。

 <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="8" />
4

3 に答える 3

14

たくさんのグーグル検索の後、私は自分の質問に答えます...

トリックはsetLinearText(true)、テキストの描画に使用される Paint オブジェクトの使用にあります。今、すべてが素晴らしく見えます。

paint = new Paint();
paint.setAntiAlias(true);
paint.setColor(color);
paint.setTextSize(size);
paint.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));
paint.setTextAlign(Align.CENTER);
paint.setLinearText(true);

ここに私の一日を救うリンクがあります:

http://gc.codehum.com/p/android/issues/detail?id=39755

それが誰かを助けることができることを願っています。

テキストはまだ最高の状態でレンダリングされていません:

ここに画像の説明を入力

編集済み (2013 年 14 月 1 日)

私はまだケリングの問題に直面しています (4.2.1 のみ)。ここで私の他の質問を見てください:

Android 4.2.1 の間違った文字カーニング (間隔)

編集済み (2013 年 5 月 2 日)

別のプロジェクトにも同じ問題があることがわかりました。以下のリンクを見てください。

http://mindtherobot.com/blog/272/android-custom-ui-making-a-vintage-thermometer/

サンプルを Nexus 4.2.1 (またはシミュレータ Android 4.2) で実行すると、同じ「奇妙な」テキストが表示されます...

編集済み (2013/02/20)

を使用しない回避策が見つかりましたsetLinearText(true)。こちらをご覧ください。

Android 4.2.1 の間違った文字カーニング (間隔)

于 2012-12-20T11:53:33.023 に答える
1

同様の問題があり、カスタムの文字間隔でビューを作成しようとしたため、この 2 つの方法を作成しました。誰かが役立つことを願っています。

/**
 * Draws a text in the canvas with spacing between each letter.
 * Basically what this method does is it split's the given text into individual letters
 * and draws each letter independently using Canvas.drawText with a separation of
 * {@code spacingX} between each letter.
 * @param canvas the canvas where the text will be drawn
 * @param text the text what will be drawn
 * @param left the left position of the text
 * @param top the top position of the text
 * @param paint holds styling information for the text
 * @param spacingPx the number of pixels between each letter that will be drawn
 */
public static void drawSpacedText(Canvas canvas, String text, float left, float top, Paint paint, float spacingPx){

    float currentLeft = left;

    for (int i = 0; i < text.length(); i++) {
        String c = text.charAt(i)+"";
        canvas.drawText(c, currentLeft, top, paint);
        currentLeft += spacingPx;
        currentLeft += paint.measureText(c);
    }
}

/**
 * returns the width of a text drawn by drawSpacedText
 */
public static float getSpacedTextWidth(Paint paint, String text, float spacingX){
    return paint.measureText(text) + spacingX * ( text.length() - 1 );
}
于 2014-10-09T00:45:23.047 に答える
1

Android 4 のデフォルトは、ハードウェア アクセラレーション オンです。これをオンにすると、一部の描画機能が正しく動作しなくなります。どれを正確に思い出すことはできませんが、マニフェスト ファイルでハードウェア アクセラレーションをオフにしてみて、違いが生じるかどうかを確認してください。

もちろん、これが原因ではないかもしれませんが、試してみる価値はあります。

于 2012-12-18T21:39:56.870 に答える