4

わかりました、これは私を狂わせています。アプリでキャンバスを使用してゲージを描画しています。また、ハッシュ マークに数字を描画し、ゲージ全体に横書きのテキストを描画します。これはすべて、Android 4.2 までのすべてのバージョンで正常に機能します。4.2 では、書くべきテキストから 1 文字 (中央の文字のように見えます) だけを描画しています。たとえば、12345 を読み取るテキストがある場合、それは 3 を書いているだけです。2 桁の数字の場合は、最初の数字だけを描画します。この動作は、4.2 エミュレーターと 4.2.1 の Nexus 4 で見られます。ハードウェア アクセラレーションがデフォルトでオンになっていることと、一部のペイントおよびキャンバス機能で問題が発生することについてすべて読みました。drawText 呼び出しのハードウェア アクセラレーションをオフにするコードを挿入しましたが、役に立ちません。

これが私のペイントコードです:

titlePaint1 = new Paint();
titlePaint1.setColor(Color.WHITE);
titlePaint1.setAntiAlias(true);
titlePaint1.setTypeface(Typeface.DEFAULT_BOLD);
titlePaint1.setTextAlign(Paint.Align.CENTER);
titlePaint1.setTextSize(0.085f);

テキストを描画するために呼び出されるメソッドは次のとおりです。

@SuppressLint("NewApi")
private void drawTitle1(Canvas canvas) {
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
        setLayerType(View.LAYER_TYPE_SOFTWARE, titlePaint1);

    canvas.drawText(title1, 0.5f, 0.72f, titlePaint1);
}

有効なキャンバスを渡し、幅と高さが完璧です。そのキャンバスに描画される他のすべてのものは正常に表示され、ゲージのコンポーネントを描画する前に、上記のような関数への呼び出しが他に 3 つあります。これは drawText の問題です。4.2 での変更と関係があることはわかっていますが、この drawText の問題がハードウェア アクセラレーションと関係があるとは思いません。Google で 4.2 の Canvas の問題について話している結果をいくつか見つけることができましたが、問題を解決するのに役立つものは何もありませんでした。これを解決してテキストを適切に表示する方法はありますか?

4

2 に答える 2

6

「セラフィムのホスト」の投稿でこれに答えてくれてありがとう. 4.2.1 でこの問題が発生している他のユーザーの場合、答えは、テキストのペイントに setLinearText(true) を含めることです。このメソッドは非推奨として表示されていますが、テキストを適切に表示するための唯一の解決策です。

答えのある投稿は次のとおりです: https://stackoverflow.com/a/13971632/1017328

于 2012-12-27T17:10:23.917 に答える
0

I strongly suspect that you have run into the bug I reported here: http://code.google.com/p/android/issues/detail?id=40965.

于 2013-01-16T19:10:19.930 に答える