2

キャンバスのdrawTextメソッドを使用してカスタムビューを作成しました。どういうわけか、どのJellyBeanデバイスにもテキストが表示されていません。ICS以下では問題なく動作します。

このメソッドまたは関連するメソッドのAPI15から16に変更があったかどうかを誰かが知っていますか?

コードの編集:(キャンバスがパラメーターとして提供されているdrawメソッドから)

    paint = new Paint();
    paint.setAntiAlias(true);
    paint.setStrokeWidth(3);
    paint.setColor(context.getResources().getColor(R.color.plot_background));
    canvas.drawRect(new Rect(0,0,getWidth(),getHeight()), paint);
    paint.setColor(color_text);
    paint.setTextSize(getScaled(18.5f));
    paint.setTextAlign(Align.CENTER);
    canvas.drawText(title, (graphwidth / 2) + horstart, border/2+15, paint);

古いプラットフォームでも同じコードが機能するため、行が実行され、座標が正しいことはわかっています。

4

1 に答える 1

4

エリックに感謝します。エラーを理解しました。アプリベースのすべてをcanvas.getDensity()でスケーリングします。現時点でのgetDensity()は、何らかの理由でジェリービーンズデバイスの描画関数が常に0になっています。ただし、1.6->4.0.3の間では正しい値が返されます

そのためのコードを投稿しませんでした(これは私のせいです)。これは、アプリが市場に出ている間、過去2年間は問題がなかったため、getDensity()が問題になるとは思わなかったためです。

回避策は、getScaled関数を変更することでした。

public float getScaled(Canvas canvas,float in){
    return in * ( canvas.getDensity()==0 ? 1 : canvas.getDensity()/ 160.0f);
} 

ドキュメントにはDENSITY_NONEが返される可能性があると記載されていますが、Jelly Beanでスケーリングが行われるのは、1を掛けるだけで、テストした2つの異なる密度のデバイスでチャームとして機能するためです。の上。

(PS Android OSの内部に精通している人は、私が間違っているか確認した場合、私を修正できますか?)

于 2012-08-25T18:16:07.657 に答える